首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用sql select查询获取所有记录中两个日期之间的差异

如何使用sql select查询获取所有记录中两个日期之间的差异
EN

Stack Overflow用户
提问于 2015-11-26 12:17:34
回答 1查看 610关注 0票数 0

让我解释一下我想要什么:假设我的表中有100条记录(列名:id,imei,纬度,经度,日期时间,状态)

然后,我用10000001个imei编号放置了50条记录,现在我必须用相同的imei获取状态为0且日期相差超过5分钟的记录。

如何获取状态为0且时长大于5的记录?

在排序中,我需要比较1个日期和2个日期,然后2个日期和3个日期,然后3个日期和4个日期,然后4个日期和5个日期,依此类推。

EN

回答 1

Stack Overflow用户

发布于 2015-11-26 13:15:09

这将对imei进行分组并按datetime排序,然后按升序比较每个datetime。既然您还没有给出更好的排序方法,我就假定这就是您要查找的内容

代码语言:javascript
运行
复制
; 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),您可以这样做:

代码语言:javascript
运行
复制
; 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33930508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档