Masz 2 problemy, które próbujesz rozwiązać. Pierwsza sprawa to jak wypełnić luki. Drugim problemem jest wypełnienie pola Count dla tych brakujących rekordów.
Problem 1:Można to rozwiązać za pomocą Dates Lookup table
lub tworząc recursive common table expression
. Zalecam utworzenie w tym celu tabeli wyszukiwania dat, jeśli jest to opcja. Jeśli nie możesz stworzyć takiej tabeli, będziesz potrzebować czegoś takiego.
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
)
To powinno stworzyć listę dat zaczynających się od MIN
data w Twojej tabeli i kończąca się na MAX
.
Problem 2:Tutaj znajduje się correlated subquery
przydałoby się (o ile generalnie trzymam się od nich z daleka), aby pobrać ostatnią cnt z oryginalnego stołu:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r