Hai 2 problemi che stai cercando di risolvere. Il primo problema è come colmare le lacune. Il secondo problema è compilare il campo Conteggio per quei record mancanti.
Problema 1:questo problema può essere risolto utilizzando una Dates Lookup table
oppure creando un'recursive common table expression
. Consiglierei di creare una tabella di ricerca delle date per questo se questa è un'opzione. Se non riesci a creare una tabella del genere, avrai bisogno di qualcosa del genere.
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
)
Questo dovrebbe creare un elenco di date che iniziano con MIN
data nella tabella e termina con MAX
.
Problema 2:ecco dove si trova una correlated subquery
sarebbe utile (per quanto io generalmente stia lontano da loro) per ottenere l'ultimo cnt dalla tua tabella originale:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r