sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo llenar los huecos?

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