Você tem 2 problemas que está tentando resolver. A primeira questão é como preencher as lacunas. O segundo problema é preencher o campo Contagem para os registros ausentes.
Problema 1:Isso pode ser resolvido usando uma
Dates Lookup table
ou criando uma recursive common table expression
. Eu recomendaria criar uma tabela de pesquisa de datas para isso, se essa for uma opção. Se você não puder criar essa tabela, precisará de algo assim. 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
)
Isso deve criar uma lista de datas começando com o
MIN
data em sua tabela e terminando em MAX
. Problema 2:Aqui é onde uma
correlated subquery
seria útil (por mais que eu geralmente fique longe deles) para obter o último cnt da sua tabela original:SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r