解決しようとしている問題が 2 つあります。そのギャップをどう埋めるかがまず課題です。 2 つ目の問題は、不足しているレコードの [カウント] フィールドにデータを入力することです。
問題 1:これは Dates Lookup table
を使用することで解決できます または、recursive common table expression
を作成することによって .オプションである場合は、このための日付ルックアップ テーブルを作成することをお勧めします。そのようなテーブルを作成できない場合は、このようなものが必要になります。
WITH CTE AS (
SELECT MAX(dt) maxdate, MIN(dt) mindate
FROM yourtable
),
RecursiveCTE AS (
SELECT mindate dtfield
FROM CTE
UNION ALL
SELECT DATEADD(day, 1, dtfield)
FROM RecursiveCTE R
JOIN CTE T
ON R.dtfield < T.maxdate
)
MIN
で始まる日付のリストが作成されます。 テーブルの日付と MAX
で終わる日付 .
問題 2:ここに correlated subquery
があります 元のテーブルから最後の cnt を取得するのに便利です (私は通常それらから離れています):
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r