>데이터 베이스 >MySQL 튜토리얼 >SQL에서 연속 행 간의 날짜 차이를 계산하는 방법은 무엇입니까?

SQL에서 연속 행 간의 날짜 차이를 계산하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-08 08:32:42232검색

How to Calculate Date Differences Between Consecutive Rows in SQL?

SQL 연속 행 날짜 차이 계산

대규모 데이터 세트로 작업할 때 데이터 분석을 위해서는 연속 레코드 간의 시간 간격을 결정하는 것이 중요합니다. 이 예에서는 동일한 계좌 번호를 가진 연속 행 간의 날짜 차이를 계산하려면 SQL 쿼리가 필요합니다.

다음과 같은 쿼리가 가능합니다:

<code class="language-sql">SELECT  T1.ID,
        T1.AccountNumber,
        T1.Date,
        MIN(T2.Date) AS NextDate,
        DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DaysDiff
FROM    YourTable T1
        LEFT JOIN YourTable T2
            ON T1.AccountNumber = T2.AccountNumber
            AND T2.Date > T1.Date
GROUP BY T1.ID, T1.AccountNumber, T1.Date;</code>

이 쿼리는 LEFT JOIN을 사용하여 T1 테이블(원래 테이블)의 각 행을 동일한 계좌 번호를 가진 T2 테이블의 모든 후속 행과 비교합니다. 그런 다음 DATEDIFF 함수를 사용하여 날짜 차이를 계산하고 결과를 ID, AccountNumberDate별로 그룹화하여 중복 행을 제거합니다. DATEDIFF(day, ...) 차이를 계산할 일수를 지정합니다.

또 다른 방법은 다음과 같습니다.

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) AS NextDate,
        DATEDIFF(day, Date, LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date)) AS DaysDiff
FROM    YourTable;</code>

이 쿼리는 창 함수LEAD를 사용하여 각 계좌 번호의 다음 행 날짜를 가져옵니다. LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) 현재 행의 다음 행의 날짜를 가져오거나, 다음 행이 없으면 NULL을 가져옵니다. 그런 다음 날짜 차이를 계산하고 결과를 필요한 형식으로 표시합니다. 이 방법은 일반적으로 LEFT JOIN보다 더 효율적이며, 특히 대규모 데이터 세트에서는 더욱 그렇습니다.

두 방법 모두 연속 행의 날짜 차이를 계산할 수 있습니다. 어떤 방법을 선택할지는 데이터베이스 시스템 및 성능 요구 사항에 따라 다릅니다. 두 번째 방법(LEAD 사용)은 일반적으로 더 간결하고 효율적입니다.

위 내용은 SQL에서 연속 행 간의 날짜 차이를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.