ホームページ >データベース >mysql チュートリアル >SQL クエリで欠落している日付をゼロ値で埋めるにはどうすればよいですか?
日付範囲間のゼロ値を持つ欠落した日付を取得する
元のクエリは 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 サイトの他の関連記事を参照してください。