ホームページ >データベース >mysql チュートリアル >SQL で連続する日付範囲を識別するにはどうすればよいですか?

SQL で連続する日付範囲を識別するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-31 12:22:13824ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。