SQL Datediff-查找行之间的Datediff

SQL Datediff-查找行之间的Datediff,sql,sql-server,tsql,datediff,Sql,Sql Server,Tsql,Datediff,我想使用sql查询数据库,以显示id 1、2、3等之间的时间差。基本上,它会比较它下面的行中的所有记录。任何帮助都将不胜感激 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 0

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

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

谢谢

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

SELECT idcode, 
       date_time, 
       date_time - lag(date_time) over (order by date_time) as difference
FROM your_table

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

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

作为@a_horse_,使用lag()时没有提到名称

我想在毫秒内知道差别是多少

Select idcode,
       datetime,
       Difference = datediff(millisecond, lag(convert(datetime2,datetime)) over (order by convert(datetime2,datetime)),convert(datetime2,datetime))
From your_table

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

嗨,对不起,Microsoft SQL Server管理研究我喜欢第一个,它为我节省了很多麻烦,但我的CTE经验不太好。对于大型表,它们对数据库的资源影响太大。如果两个日期的ID代码相同,是否有方法添加计数,并使用相同的ID代码而不是增量方式获取这两行之间的差异?例如:假设前两个日期的IDCODE为1,因此,我只想获取这两行之间的datediff。
Select idcode,
       datetime,
       Difference = datediff(millisecond, lag(convert(datetime2,datetime)) over (order by convert(datetime2,datetime)),convert(datetime2,datetime))
From your_table