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

SQL は連続する日付範囲をどのように識別できるのでしょうか?

Susan Sarandon
リリース: 2025-01-01 01:20:08
オリジナル
965 人が閲覧しました

How Can SQL Identify Consecutive Date Ranges?

SQL を使用した連続する日付範囲の検出

概要

カレンダー アプリケーションのデータを準備する場合、多くの場合、一連の日付から連続した日付範囲を抽出する必要があります。このタスクは、特に日付の間隔が一定でない場合には困難になる可能性があります。

SQL を使用した解決策

SQL を使用してこの問題を解決するには、次のアプローチを利用できます。

  1. 行番号列を作成します: それぞれに行番号を割り当てますROW_NUMBER() 関数を使用して日付を取得します。これにより、日付ごとに一意の識別子が作成されます。
  2. 日付の差分でグループ化: 行番号と日付自体の差分で日付をグループ化します。この違いは、連続するシーケンス内では不変です。
  3. 開始日と終了日の検索: MIN() 関数と MAX() 関数を使用して、各グループ内の最小日付と最大日付を決定します。これらは、連続する範囲の開始日と終了日を表します。

SQL クエリ

次の SQL クエリは、上記のアプローチを実装します。

WITH t AS (
  SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
  FROM table_name
  GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)
ログイン後にコピー

結果

クエリにより次のものが生成されます。出力:

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 は連続する日付範囲をどのように識別できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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