Je hebt twee problemen die je probeert op te lossen. Het eerste probleem is hoe de lacunes kunnen worden opgevuld. Het tweede probleem is het invullen van het veld Aantal voor de ontbrekende records.
Probleem 1:Dit kan worden opgelost door een Dates Lookup table
te gebruiken of door een recursive common table expression
te maken . Ik zou aanraden om hiervoor een Date Lookup-tabel te maken als dat een optie is. Als je zo'n tabel niet kunt maken, heb je zoiets als dit nodig.
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
)
Dat zou u een lijst met datums moeten maken die beginnen met de MIN
datum in uw tabel en eindigend op de MAX
.
Probleem 2:Hier is waar een correlated subquery
zou van pas komen (zoveel als ik er over het algemeen uit de buurt blijf) om de laatste cnt van je originele tafel te krijgen:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r