Sie haben zwei Probleme, die Sie lösen möchten. Die erste Frage ist, wie man die Lücken füllt. Das zweite Problem besteht darin, das Feld „Anzahl“ für diese fehlenden Datensätze aufzufüllen.
Problem 1:Dieses Problem kann gelöst werden, indem entweder eine Dates Lookup table
verwendet wird oder indem Sie einen recursive common table expression
erstellen . Ich würde empfehlen, dafür eine Datums-Nachschlagetabelle zu erstellen, wenn dies eine Option ist. Wenn Sie eine solche Tabelle nicht erstellen können, brauchen Sie so etwas.
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
)
Das sollte Ihnen eine Liste von Daten erstellen, die mit MIN
beginnen Datum in Ihrer Tabelle und endet mit MAX
.
Problem 2:Hier ist eine correlated subquery
wäre praktisch (so sehr ich mich im Allgemeinen von ihnen fernhalte), um den letzten cnt aus Ihrer ursprünglichen Tabelle zu erhalten:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r