Имате 2 проблема, които се опитвате да разрешите. Първият въпрос е как да запълним празнините. Вторият проблем е попълването на полето Брой за тези липсващи записи.
Проблем 1:Това може да бъде решено чрез използване на Dates Lookup table
или чрез създаване на recursive common table expression
. Бих препоръчал да създадете таблица за търсене на дати за това, ако това е опция. Ако не можете да създадете такава таблица, тогава ще ви трябва нещо подобно.
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
)
Това трябва да ви създаде списък с дати, започващи с MIN
дата във вашата таблица и завършваща на MAX
.
Проблем 2:Ето къде е correlated subquery
би било полезно (доколкото обикновено стоя настрана от тях), за да получите последния cnt от вашата оригинална таблица:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r