Máte 2 problémy, které se snažíte vyřešit. První otázkou je, jak zaplnit mezery. Druhým problémem je vyplnění pole Počet pro tyto chybějící záznamy.
Problém 1:Tento problém lze vyřešit buď pomocí Dates Lookup table
nebo vytvořením recursive common table expression
. Doporučil bych pro to vytvořit tabulku pro vyhledávání dat, pokud je to možné. Pokud nemůžete vytvořit takovou tabulku, pak budete potřebovat něco takového.
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 by vám mělo vytvořit seznam dat začínající MIN
datum ve vaší tabulce a končící na MAX
.
Problém 2:Zde je correlated subquery
by se hodil (jakkoli se od nich obecně držím dál), abych získal poslední cnt z vašeho původního stolu:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r