Sql server SQL分组GPS行程数据
这是我的桌子 我需要创建此报告 行驶标志是汽车的状态 所以我需要真正驾驶的第一个点作为旅程的开始 最后一点作为总周期和总距离的终点 车站也一样 以及移动的最大和平均速度 该表应按id排序,以保持驾驶记录有序 多谢各位 编辑 这是我在基于速度创建驱动标志之前的最后一次尝试`Sql server SQL分组GPS行程数据,sql-server,sql-server-2014,Sql Server,Sql Server 2014,这是我的桌子 我需要创建此报告 行驶标志是汽车的状态 所以我需要真正驾驶的第一个点作为旅程的开始 最后一点作为总周期和总距离的终点 车站也一样 以及移动的最大和平均速度 该表应按id排序,以保持驾驶记录有序 多谢各位 编辑 这是我在基于速度创建驱动标志之前的最后一次尝试` 但它按全天分组,通过IMEi和驾驶,即以10公里的距离移动30分钟,得到总计,停止30分钟get Period LastDate StartDate and get Total Distance我在主帖子中添加了我的上一个查
但它按全天分组,通过IMEi和驾驶,即以10公里的距离移动30分钟,得到总计,停止30分钟get Period LastDate StartDate and get Total Distance我在主帖子中添加了我的上一个查询I可能是错误的,但在示例数据中,随着Id的增加,例如IMEI 860990002931419的TrackTime和CurrTime会倒退。这是预期的吗?这是样本数据真实数据是正确的,即id=100,时间10:00,id=101,时间=10:02,id=102,时间=10:03当将数据复制到Fiddle时会发生这种情况,如果您能纠正IMEi和驾驶会非常欣赏的样本数据,即以10 KM的距离移动30分钟,停止30分钟get Period LastDate StartDate and get Total Distance我在主帖子中添加了我的上一个查询I可能是错误的,但在示例数据中,随着Id的增加,例如IMEI 860990002931419的TrackTime和CurrTime会倒退。这是预期的吗?这是样本数据真实数据是正确的,即id=100,时间10:00,id=101,时间=10:02,id=102,时间=10:03当将数据复制到Fiddle时会发生这种情况,如果您愿意更正样本数据,我们将不胜感激
SELECT
carid
, (SUM(CASE WHEN speed < 3 THEN 0 ELSE DATEDIFF(minute, b.trackold, b.TrackTime) END)) AS speeding
, (SUM(CASE WHEN speed >= 3 THEN 0 ELSE DATEDIFF(minute, b.trackold, b.TrackTime) END)) AS parked
, round(sum(Distance / 1000), 2) AS Distance
, TrackDay
FROM
(
SELECT
carid
, TrackDay
, TrackTime
, trackold
, speed
, TrackDayOld
, diff
, Distance
FROM
(
SELECT
carid
, TrackTime
, LAG(TrackTime, 1, NULL) OVER (PARTITION BY carid ORDER BY TrackTime) AS trackold
, CONVERT(date, TrackTime) AS TrackDay
, CONVERT(date, LAG(TrackTime, 1, NULL) OVER (PARTITION BY carid ORDER BY TrackTime)) AS TrackDayOld
, speed
, datediff(minute, LAG(TrackTime, 1, NULL) OVER (PARTITION BY carid ORDER BY carid), TrackTime) AS diff
, Distance
FROM T_Tracking
) a
WHERE a.TrackDay = a.TrackDayOld
) b GROUP BY carid
, TrackDay