让我解释一下我想要什么:假设我的表中有100条记录(列名:id,imei,纬度,经度,日期时间,状态)
然后,我用10000001个imei编号放置了50条记录,现在我必须用相同的imei获取状态为0且日期相差超过5分钟的记录。
如何获取状态为0且时长大于5的记录?
在排序中,我需要比较1个日期和2个日期,然后2个日期和3个日期,然后3个日期和4个日期,然后4个日期和5个日期,依此类推。
发布于 2015-11-26 05:15:09
这将对imei进行分组并按datetime排序,然后按升序比较每个datetime。既然您还没有给出更好的排序方法,我就假定这就是您要查找的内容
; WITH T AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY imei ORDER BY datetime) RN
FROM tblName)
SELECT T1.imei, T1.status, T1.datetime [date1], T2.datetime [date2], DATEDIFF(mi, T1.datetime, T2.datetime) [difference]
FROM T T1
JOIN (SELECT imei, RN, datetime FROM T WHERE RN > 1) T2 ON T2.RN-1 = T1.RN AND T1.imei = T2.imei
WHERE T1.datetime < DATEADD(mm, -5, T2.datetime)
AND T1.Status = 0
或者,如果您只想要日期差异(不管它们是大于还是小于5),您可以这样做:
; WITH T AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY imei ORDER BY datetime) RN
FROM tblName)
SELECT T1.imei, T1.status, T1.datetime [date1], T2.datetime [date2], DATEDIFF(mi, T1.datetime, T2.datetime) [difference], CASE WHEN DATEDIFF(mi, T1.datetime, T2.datetime) > 5 THEN 'Y' ELSE 'N' END -- 'Y' means greater than 5, 'N' less than or equal to 5
FROM T T1
LEFT JOIN (SELECT imei, RN, datetime FROM T WHERE RN > 1) T2 ON T2.RN-1 = T1.RN AND T1.imei = T2.imei
WHERE T1.Status = 0
https://stackoverflow.com/questions/33930508
复制