특정 계정에 대한 SQL의 연속 행 간의 날짜 차이를 효율적으로 계산
이 문서에서는 특정 계좌 번호에 대해 연속된 행 간의 날짜 차이를 계산하는 두 가지 SQL 쿼리를 보여줍니다. 제시된 방법은 다양한 수준의 효율성을 제공합니다.
방법 1: LEFT JOIN
및 MIN()
이 접근 방식은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!