ホームページ > データベース > mysql チュートリアル > SQL で連続する日付範囲を特定して抽出する方法

SQL で連続する日付範囲を特定して抽出する方法

Mary-Kate Olsen
リリース: 2025-01-03 05:34:38
オリジナル
128 人が閲覧しました

How to Identify and Extract Consecutive Date Ranges in SQL?

SQL での連続する日付範囲の識別

質問:

未ソートの日付の単一列。これらの範囲は、カレンダー オブジェクトを正確に埋めるために開始日と終了日を必要とする時間のセグメントを表します。

解決策:

アプローチ:

SQL を使用してこの問題を解決するには、「ギャップ アンド アイランド」メソッドを使用できます。この方法では、この値が連続するシーケンスごとに一定のままであるため、連続する日付を行番号との差によってグループ化します。次に、MIN() 関数と MAX() 関数を使用して、各グループの開始日と終了日を抽出します。

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)
ログイン後にコピー

説明:

  • WITH 句は、次の名前の共通テーブル式 (CTE) を作成します。 t.
  • CTE は、元のテーブル @d の各行の InfoDate 列 d と行番号 i を選択します。
  • データは、連続する各シーケンス内での一意性を確保するために InfoDate によってグループ化されます。
  • SELECT ステートメントは、連続する範囲の開始日と終了日を表す各グループの最小日付と最大日付を計算します。
  • DATEDIFF() 関数は、行番号と日付の差を計算するために使用されます。この差は連続する各シーケンス内で一定のままであり、連続する日付を効果的にグループ化します。

出力:

結果のテーブルには次のものが含まれます。 columns:

  • StartDate
  • EndDate

この出力は、連続する各日付範囲の開始日と終了日を提供し、カレンダー オブジェクトに次の値を設定できます。必要な日付情報。

以上がSQL で連続する日付範囲を特定して抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート