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