Tienes 2 problemas que estás tratando de resolver. El primer problema es cómo llenar los vacíos. El segundo problema es llenar el campo Recuento para esos registros que faltan.
Problema 1:esto se puede resolver usando una Dates Lookup table
o creando una recursive common table expression
. Recomendaría crear una tabla de búsqueda de fechas para esto si esa es una opción. Si no puede crear una tabla de este tipo, necesitará algo como esto.
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
)
Eso debería crear una lista de fechas que comienzan con MIN
fecha en su tabla y terminando en el MAX
.
Problema 2:Aquí es donde una correlated subquery
sería útil (aunque generalmente me mantengo alejado de ellos) para obtener el último centavo de su tabla original:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r