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

Hvordan udfylder man hullerne?

Du har 2 problemer, du prøver at løse. Det første spørgsmål er, hvordan man udfylder hullerne. Det andet problem er at udfylde feltet Antal for de manglende poster.

Problem 1:Dette kan løses ved enten at bruge en Dates Lookup table eller ved at skabe et recursive common table expression . Jeg vil anbefale at oprette en datoopslagstabel til dette, hvis det er en mulighed. Hvis du ikke kan oprette sådan en tabel, så får du brug for noget som dette.

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
  )

Det skulle skabe dig en liste over datoer, der starter med MIN dato i din tabel og slutter med MAX .

Problem 2:Her er en correlated subquery ville være praktisk (så meget som jeg generelt holder mig væk fra dem) for at få den sidste cnt fra din originale tabel:

SELECT r.dtfield, 
   (SELECT TOP 1 cnt
    FROM yourtable 
    WHERE dt <= r.dtfield 
    ORDER BY dt DESC) cnt
FROM RecursiveCTE r


  1. Overtrædelse af integritetsbegrænsning:1048 Kolonne 'user_id' kan ikke være null fejl opstår ved tildeling af roller (Laravel 5.3)

  2. Mysql-tidsstempel Data afkortet for kolonne

  3. SQL Stored Procedure - variabel for kort

  4. Hvordan returnerer jeg en jsonb-array og en række objekter fra mine data?