>데이터 베이스 >MySQL 튜토리얼 >SQL에서 연속 날짜 범위를 식별하는 방법은 무엇입니까?

SQL에서 연속 날짜 범위를 식별하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-31 12:22:13810검색

How to Identify Consecutive Date Ranges in SQL?

SQL을 사용하여 연속 날짜 범위 검색

일련의 날짜가 포함된 열에서 연속 날짜 범위를 식별하려면 SQL을 사용하여 시작 날짜와 종료 날짜를 효율적으로 추출할 수 있습니다. 각 범위의

다음 데이터세트를 고려하세요.

InfoDate

2013-12-04
2013-12-05
2013-12-06

2013-12-09
2013-12-10

2014-01-01
2014-01-02
2014-01-03

2014-01-06
2014-01-07

2014-01-29
2014-01-30
2014-01-31

2014-02-03
2014-02-04

목표 각 연속 날짜 범위의 시작 날짜와 종료 날짜를 추출하여 결과는 다음과 같습니다.

StartDate     EndDate

2013-12-04    2013-12-06
2013-12-09    2013-12-10
2014-01-01    2014-01-03
2014-01-06    2014-01-07
2014-01-29    2014-01-31
2014-02-03    2014-02-04

다음 단계를 사용하면 간단하고 효율적인 SQL 솔루션을 고안할 수 있습니다.

  1. 할당 InfoDate 열의 각 날짜에 고유한 행 번호를 추가하여 t라는 도우미 테이블을 만듭니다. 이 번호 매기기를 통해 연속된 날짜를 쉽게 그룹화할 수 있습니다.
  2. 날짜와 해당 행 번호 간의 차이를 기준으로 t의 행을 그룹화합니다. 이 그룹화는 날짜 순서에 "간격"을 만듭니다.
  3. 각 그룹 내에서 최소 및 최대 날짜는 연속된 날짜 범위의 시작 및 종료 날짜를 나타냅니다.

SQL 이를 달성하기 위한 쿼리는 다음과 같습니다.

WITH t AS (
  SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
  FROM @d
  GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)

위 내용은 SQL에서 연속 날짜 범위를 식별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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