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

SQL에서 특정 계좌 번호에 대한 연속 행 간의 날짜 차이를 계산하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-08 08:26:42
원래의
528명이 탐색했습니다.

How to Calculate Date Differences Between Consecutive Rows for a Specific Account Number in SQL?

특정 계정에 대한 SQL의 연속 행 간의 날짜 차이를 효율적으로 계산

이 문서에서는 특정 계좌 번호에 대해 연속된 행 간의 날짜 차이를 계산하는 두 가지 SQL 쿼리를 보여줍니다. 제시된 방법은 다양한 수준의 효율성을 제공합니다.

방법 1: LEFT JOINMIN()

사용

이 접근 방식은 LEFT JOIN을 사용하여 각 행을 동일한 계정의 후속 행과 비교합니다. MIN() 함수는 다음 날짜를 찾습니다.

SELECT  T1.ID, 
        T1.AccountNumber, 
        T1.Date, 
        MIN(T2.Date) AS Date2, 
        DATEDIFF("D", 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;
로그인 후 복사

이 쿼리는 테이블(YourTable)을 자체적으로 조인하여 각 행(T1)을 동일한 계좌 번호(T2)에 대해 다음의 모든 행과 비교합니다. MIN(T2.Date)은 이후의 가장 빠른 날짜를 찾고 DATEDIFF는 일수 차이를 계산합니다. 그룹화하면 각 원본 행에 대한 결과가 보장됩니다.

방법 2: 효율성 향상을 위한 하위 쿼리 사용

대규모 데이터 세트의 경우 하위 쿼리 접근 방식이 더 효율적인 경우가 많습니다. 이 방법은 기본 쿼리 내에 날짜 계산을 직접 통합합니다.

SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF("D", Date, NextDate) AS DaysDiff
FROM    (   SELECT  ID, 
                    AccountNumber,
                    Date,
                    (   SELECT  MIN(Date) 
                        FROM    YourTable T2
                        WHERE   T2.AccountNumber = T1.AccountNumber
                        AND     T2.Date > T1.Date
                    ) AS NextDate
            FROM    YourTable T1
        ) AS T
로그인 후 복사

여기에는 각 행의 NextDate을 찾기 위한 하위 쿼리가 중첩되어 있습니다. 이렇게 하면 잠재적으로 효율성이 떨어지는 JOIN 작업을 피할 수 있습니다. 그런 다음 외부 쿼리는 DaysDiff을 사용하여 DATEDIFF을 계산합니다.

두 방법 모두 동일한 결과를 얻습니다. 즉, 각 계좌 번호에 대한 연속 레코드 간의 날짜 차이를 계산합니다. 그러나 대규모 테이블에서 최적의 성능을 위해서는 일반적으로 방법 2(하위 쿼리 사용)을 권장합니다. 귀하의 데이터 볼륨과 데이터베이스 시스템에 가장 적합한 방법을 선택하세요.

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿