Du har 2 problemer, du prøver at løse. Det første spørgsmål er, hvordan man udfylder hullerne. Det andet problem er at udfylde feltet Antal for de manglende poster.
Problem 1:Dette kan løses ved enten at bruge en Dates Lookup table
eller ved at skabe et recursive common table expression
. Jeg vil anbefale at oprette en datoopslagstabel til dette, hvis det er en mulighed. Hvis du ikke kan oprette sådan en tabel, så får du brug for noget som dette.
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
)
Det skulle skabe dig en liste over datoer, der starter med MIN
dato i din tabel og slutter med MAX
.
Problem 2:Her er en correlated subquery
ville være praktisk (så meget som jeg generelt holder mig væk fra dem) for at få den sidste cnt fra din originale tabel:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r