Du har 2 problem som du försöker lösa. Den första frågan är hur man fyller luckorna. Det andra problemet är att fylla i fältet Antal för de saknade poster.
Problem 1:Detta kan lösas genom att antingen använda en Dates Lookup table
eller genom att skapa ett recursive common table expression
. Jag skulle rekommendera att skapa en Date Lookup-tabell för detta om det är ett alternativ. Om du inte kan skapa en sådan tabell, kommer du att behöva något liknande det här.
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 borde skapa dig en lista över datum som börjar med MIN
datum i tabellen och slutar med MAX
.
Problem 2:Här är en correlated subquery
skulle vara praktiskt (så mycket som jag i allmänhet håller mig borta från dem) för att få den sista cnt från ditt ursprungliga bord:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r