首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Datediff -查找行之间的datediff

SQL Datediff -查找行之间的datediff
EN

Stack Overflow用户
提问于 2011-04-20 18:04:16
回答 3查看 29.6K关注 0票数 18

我想使用sql查询一个数据库,以显示id 1、2、3等之间的时间差。基本上,它将比较它下面的行中的所有记录。任何帮助都将不胜感激。

代码语言:javascript
复制
IDCODE  DATE TIME        DIFFERENCE (MINS)
1      02/03/2011 08:00        0
2      02/03/2011 08:10        10
3      02/03/2011 08:23        13
4       02/03/2011 08:25        2
5       02/03/2011 09:25        60
6       02/03/2011 10:20        55
7       02/03/2011 10:34        14

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2011-04-20 18:13:17

如果使用SQL Server,一种方法是:

代码语言:javascript
复制
DECLARE @Data TABLE (IDCode INTEGER PRIMARY KEY, DateVal DATETIME)
INSERT @Data VALUES (1, '2011-03-02 08:00')
INSERT @Data VALUES (2, '2011-03-02 08:10')
INSERT @Data VALUES (3, '2011-03-02 08:23')
INSERT @Data VALUES (4, '2011-03-02 08:25')
INSERT @Data VALUES (5, '2011-03-02 09:25')
INSERT @Data VALUES (6, '2011-03-02 10:20')
INSERT @Data VALUES (7, '2011-03-02 10:34')

SELECT t1.IDCode, t1.DateVal, ISNULL(DATEDIFF(mi, x.DateVal, t1.DateVal), 0) AS Mins
FROM @Data t1
    OUTER APPLY (
        SELECT TOP 1 DateVal FROM @Data t2 
        WHERE t2.IDCode < t1.IDCode ORDER BY t2.IDCode DESC) x

另一种方法是使用CTE和ROW_NUMBER(),如下所示:

代码语言:javascript
复制
;WITH CTE AS (SELECT ROW_NUMBER() OVER (ORDER BY IDCode) AS RowNo, IDCode, DateVal FROM @Data)

SELECT t1.IDCode, t1.DateVal, ISNULL(DATEDIFF(mi, t2.DateVal, t1.DateVal), 0) AS Mins
FROM CTE t1
    LEFT JOIN CTE t2 ON t1.RowNo = t2.RowNo + 1
ORDER BY t1.IDCode
票数 30
EN

Stack Overflow用户

发布于 2011-04-20 18:06:58

标准ANSI SQL解决方案。应该适用于PostgreSQL、Oracle、DB2和Teradata:

代码语言:javascript
复制
SELECT idcode, 
       date_time, 
       date_time - lag(date_time) over (order by date_time) as difference
FROM your_table
票数 16
EN

Stack Overflow用户

发布于 2021-05-08 01:42:04

正如@a_horse_with_no_name提到的使用lag()

我想要的是毫秒级的差异。

代码语言:javascript
复制
Select idcode,
       datetime,
       Difference = datediff(millisecond, lag(convert(datetime2,datetime)) over (order by convert(datetime2,datetime)),convert(datetime2,datetime))
From your_table

在我的例子中,我需要将字符串转换为datetime2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5728602

复制
相关文章

相似问题

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