Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come colmare le lacune?

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