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

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

Susan Sarandon
Susan Sarandon원래의
2025-01-08 08:26:42479검색

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

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

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

방법 1: LEFT JOINMIN()

사용

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

<code class="language-sql">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;</code>

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

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

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

<code class="language-sql">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</code>

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

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

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

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