如何解决计算每次加油的距离和油耗
+--------+------+-------+------------------+------------+------------+-------+-------------+----------+------------------+
| Number | Id | Speed | DateTime | x | y | value | distance | ds | remarks |
+--------+------+-------+------------------+------------+------------+-------+-------------+----------+------------------+
| MB125 | 6290 | 0 | 9/24/20 12:05 AM | 73.1095066 | 33.54376 | 405.6 | 0.033162654 | NULL | |
| MB125 | 6290 | 26 | 9/24/20 5:38 PM | 73.1548833 | 33.5737866 | 398.8 | 0.45217702 | 3.2 | Filling(3.2) |
| MB125 | 6290 | 0 | 9/26/20 3:42 PM | 71.2384983 | 31.502485 | 189.4 | 0 | 0.9 | adjustment (0.9) |
| MB125 | 6290 | 0 | 9/26/20 4:13 PM | 71.2351549 | 31.4826683 | 389 | 0.144494657 | 202.5 | Filling(202.5) |
| MB125 | 6290 | 5 | 9/26/20 4:15 PM | 71.2348366 | 31.4813966 | 392.6 | 0.182010336 | 3.6 | Filling(3.6) |
| MB125 | 6290 | 5 | 9/26/20 4:17 PM | 71.2351333 | 31.4797783 | 392.3 | 0.139413206 | -0.3 | |
| MB125 | 6290 | 16 | 9/27/20 11:44 AM | 71.637325 | 29.3697783 | 260.2 | 0.453226377 | 0 | |
| MB125 | 6290 | 19 | 9/27/20 11:46 AM | 71.641335 | 29.3718816 | 260.7 | 0.343467266 | 0.5 | adjustment (0.5) |
| MB125 | 6290 | 0 | 9/27/20 11:48 AM | 71.6439233 | 29.373995 | 260.1 | 0.07865584 | -0.6 | |
| MB125 | 6290 | 0 | 9/27/20 1:02 PM | 71.6434633 | 29.3734116 | 400.6 | 0.00648517 | 140.5 | Filling(140.5) |
| MB125 | 6290 | 0 | 9/29/20 6:15 PM | 67.2537633 | 24.8577533 | 150.5 | 0.036963575 | 0.4 | adjustment (0.4) |
| MB125 | 6290 | 8 | 9/29/20 6:17 PM | 67.253455 | 24.8575733 | 150 | 0.163134678 | -0.5 | |
| MB125 | 6290 | 0 | 9/29/20 6:19 PM | 67.25335 | 24.8561083 | 151.4 | 0.000750227 | 1.4 | adjustment (1.4) |
| MB125 | 6290 | 0 | 9/29/20 6:21 PM | 67.253355 | 24.8561033 | 151.9 | 0.065821168 | 0.5 | adjustment (0.5) |
| MB125 | 6290 | 5 | 9/29/20 6:23 PM | 67.253165 | 24.85667 | 151.2 | 0.004457236 | -0.7 | |
| MB125 | 6290 | 0 | 9/29/20 6:25 PM | 67.2531683 | 24.85663 | 169.6 | 0 | 18.4 | Filling(18.4) |
| MB125 | 6290 | 0 | 9/29/20 6:29 PM | 67.2531683 | 24.85663 | 315.7 | 0.074685692 | 146.1 | Filling(146.1) |
| MB125 | 6290 | 9 | 9/29/20 6:31 PM | 67.2525283 | 24.8562916 | 366.2 | 0.099031196 | 50.5 | Filling(50.5) |
| MB125 | 6290 | 0 | 9/29/20 6:33 PM | 67.2515583 | 24.8561516 | 382.4 | 0 | 16.2 | Filling(16.2) |
| MB125 | 6290 | 0 | 9/29/20 6:35 PM | 67.2515583 | 24.8561516 | 386.2 | 0.017310501 | 3.8 | Filling(3.8) |
| MB125 | 6290 | 0 | 9/30/20 11:59 PM | 67.0170466 | 24.83925 | 381.8 | NULL | -1.2 | |
+--------+------+-------+------------------+------------+------------+-------+-------------+----------+------------------+
必需的输出
+--------+------+------------------+------------------+------------+------------+------------+-----------+------------+----------+----------+---------+
| Number | Id | from date | todate | from x | from y | To x | To Y | from Value | to Value | distance | Filling |
+--------+------+------------------+------------------+------------+------------+------------+-----------+------------+----------+----------+---------+
| MB125 | 6290 | 9/24/20 12:05 AM | 9/26/20 3:42 PM | 73.1095066 | 33.54376 | 71.2384983 | 31.502485 | 405.6 | 189.4 | 0.8118 | 206.1 |
| MB126 | 6291 | 9/26/20 4:15 PM | 9/27/20 11:48 AM | 71.2348366 | 31.4813966 | 71.6439233 | 29.373995 | 392.6 | 260.1 | 1.014 | 140.5 |
+--------+------+------------------+------------------+------------+------------+------------+-----------+------------+----------+----------+---------+
我想计算每次填充的车辆距离和燃油消耗。我正在使用以下查询来提取所需的结果,并且在加油时将结果分开。我正在使用sql server 2012提取所需的结果。
SELECT
Number,ObjectId,VectorSpeed,GpsTime,x,y,[value],distance,ds,CASE
WHEN ( CAST( ds AS float(5) ) > CAST( 0 AS float(5) ) ) AND ( CAST( ds AS float(5) ) <= CAST( 3 AS float(5) ) ) THEN 'adjustment (' + ds + ')'
ELSE [status]
END AS remarks
FROM (
SELECT
*,CASE
WHEN ( [value] - ( LAG( [value] ) OVER ( ORDER BY t.GpsTime ) ) ) > 0 then 'Filling(' + CAST( [value] - ( LAG( [value] ) OVER ( ORDER BY t.GpsTime ) ) AS varchar(50) ) + ')'
ELSE ''
END AS 'status',CAST( [value] - ( LAG( [value] ) OVER ( ORDER BY t.GpsTime ) ) AS varchar(50) ) AS ds,LAG( [value] ) OVER ( ORDER BY t.GpsTime ) AS PreviousValue,LEAD( [value] ) OVER ( ORDER BY t.GpsTime ) AS NextValue,tavl2.tavl.fn_GpsUtil_Distance(
x,LEAD( x ) OVER ( PARTITION BY objectid ORDER BY GpsTime ),LEAD( y ) OVER ( PARTITION BY objectid ORDER BY GpsTime )
) AS distance
FROM (
SELECT
LEAD( m.VectorSpeed ) OVER ( PARTITION BY o.ObjectId,o.Number ORDER BY m.GpsTime ) AS NextSpeed,LAG( m.VectorSpeed ) OVER ( PARTITION BY o.ObjectId,o.Number ORDER BY m.GpsTime ) AS PrevSpeed,o.Number,m.ObjectId,[value]
FROM tavl2.tavl.Object o
JOIN tavl2.tavl.Message m ON o.ObjectId = m.ObjectId
JOIN tavl2.tavl.MessageData md ON m.MessageId = md.MessageId
JOIN tavl2.tavl.DataSource ds ON md.DataSourceId = ds.DataSourceId
WHERE
m.ObjectId = 6290
AND CONVERT( date,GpsTime ) >= CONVERT( date,'2020/9/24' )
AND CONVERT( date,GpsTime ) <= CONVERT( date,'2020/9/30' )
AND [name] LIKE '%Fuel Level%'
AND [value] > 1
) AS t
WHERE
t.VectorSpeed <> COALESCE( t.NextSpeed,-1 )
OR t.VectorSpeed <> COALESCE( t.PrevSpeed,-1 )
) AS main;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。