25

各グループに連続した時系列があるように、ループを使用して、SQL のグループごとの開始日/終了日に基づいて欠落している日付を値ゼロで埋める方法を知りたいです。2 つの質問があります。

  1. グループごとにループする方法は?
  2. 各グループの開始日/終了日を使用して、不足している日付を動的に埋める方法は?

私の入力と期待される出力は以下のとおりです。

入力:私はテーブル A のようなものを持っています

date     value      grp_no
8/06/12    1         1
8/08/12    1         1
8/09/12    0         1
8/07/12    2         2
8/08/12    1         2
8/12/12    3         2

また、欠落している日付を埋めるために A と左結合するために使用できるテーブル B があります。

date
...
8/05/12
8/06/12
8/07/12
8/08/12
8/09/12
8/10/12
8/11/12
8/12/12
8/13/12
...

A と B を使用して、SQL で次の出力を生成するにはどうすればよいですか?

出力:

date     value      grp_no
8/06/12    1         1  
8/07/12    0         1
8/08/12    1         1
8/09/12    0         1
8/07/12    2         2
8/08/12    1         2
8/09/12    0         2
8/10/12    0         2
8/11/12    0         2
8/12/12    3         2

あなたのコードと提案を送ってください。よろしくお願いします!!!

4

3 に答える 3

0

必要な期間のすべての日付を返すクエリが必要でした。結合なし。それらをあなたのクエリに入れたい人のために共有したいと思いました. 365 を任意の時間枠に変更するだけです。

DECLARE @s DATE = GETDATE()-365, @e DATE = GETDATE();
SELECT TOP (DATEDIFF(DAY, @s, @e)+1)
 DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY number)-1, @s)
 FROM [master].dbo.spt_values
 WHERE [type] = N'P' ORDER BY number
于 2021-04-09T11:39:07.620 に答える