SQL Datediff - find datediff between rows

后端 未结 2 2017
醉梦人生
醉梦人生 2020-12-05 05:40

I would like to query a database using sql to show the difference in time between id 1,2,3 and so on. basically it will compare the row below it for all records. any help wo

相关标签:
2条回答
  • 2020-12-05 05:57

    If using SQL Server, one way is to do:

    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
    

    Another way is using a CTE and ROW_NUMBER(), like this:

    ;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
    
    0 讨论(0)
  • 2020-12-05 06:12

    Standard ANSI SQL solution. Should work in PostgreSQL, Oracle, DB2 and Teradata:

    SELECT idcode, 
           date_time, 
           date_time - lag(date_time) over (order by date_time) as difference
    FROM your_table
    
    0 讨论(0)
提交回复
热议问题