ホームページ >データベース >mysql チュートリアル >SQL クエリで欠落している日付をゼロ値で埋めるにはどうすればよいですか?

SQL クエリで欠落している日付をゼロ値で埋めるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-17 11:08:25422ブラウズ

How to Fill Missing Dates with Zero Values in SQL Queries?

日付範囲間のゼロ値を持つ欠落した日付を取得する

元のクエリは 2 つの日付間のデータを取得しましたが、欠落した日付は除外されました。欠落した日付を含め、欠落したデータにゼロ値を割り当てるには、「日付フラグ付け」と呼ばれる手法を利用できます。

欠落した日付のフラグ付け

再帰的共通テーブル式 (CTE) を使用して、指定された範囲内の一連の日付を生成できます。 d という名前の CTE は、範囲の最初の日付から始まり、終了日に達するまで再帰的に 1 日を追加します。

;with d(date) as (
  select cast('10/01/2012' as datetime)
  union all
  select date+1
  from d
  where date < '10/15/2012'
  )

既存データとの結合

次に、CTE d と元のデータ テーブル temp (t) の間で左外部結合を実行し、各日付の既存のデータを取得します。 temp に日付が存在する場合は、その値が使用されます。それ以外の場合は、ゼロに置き換えられます。

select t.ID, d.date CDate, isnull(t.val, 0) val
from d
left join temp t
       on t.CDate = d.date
order by d.date
OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart

MAXRECURSION に関する注意

OPTION (MAXRECURSION 0) 句は、日付範囲が次の場合に過剰な再帰によってクエリが失敗するのを防ぎます。大きすぎます。特定のデータ範囲に合わせて値を調整できます。

この手法を使用すると、欠落している日付を含む 2 つの日付間のすべての日付を取得でき、欠落している値は確実にゼロとして表現されます。

以上がSQL クエリで欠落している日付をゼロ値で埋めるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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