집 >데이터 베이스 >MySQL 튜토리얼 >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
, AccountNumber
및 Date
별로 그룹화하여 중복 행을 제거합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!