복붙노트

[SQL] SQL DATEDIFF - 행 사이 DATEDIFF를 찾을 수

SQL

SQL DATEDIFF - 행 사이 DATEDIFF를 찾을 수

나는 그래서 ID 1,2,3와 사이의 시간 차이를 보여 SQL을 사용하여 데이터베이스를 조회하고 싶습니다. 기본적으로 모든 기록을 위해 아래 행을 비교합니다. 어떤 도움을 주시면 감사하겠습니다.

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

감사!

해결법

  1. ==============================

    1.SQL 서버를 사용하는 경우, 하나의 방법은하는 것입니다 :

    SQL 서버를 사용하는 경우, 하나의 방법은하는 것입니다 :

    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 ()를 사용하고 있습니다 :

    ;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
    
  2. ==============================

    2.표준 ANSI SQL 솔루션입니다. PostgreSQL을, 오라클, DB2 및 테라 데이타에서 작동합니다 :

    표준 ANSI SQL 솔루션입니다. PostgreSQL을, 오라클, DB2 및 테라 데이타에서 작동합니다 :

    SELECT idcode, 
           date_time, 
           date_time - lag(date_time) over (order by date_time) as difference
    FROM your_table
    
  3. from https://stackoverflow.com/questions/5728602/sql-datediff-find-datediff-between-rows by cc-by-sa and MIT license