sql >> Databasteknik >  >> RDS >> Sqlserver

Hur fyller man luckorna?

Du har 2 problem som du försöker lösa. Den första frågan är hur man fyller luckorna. Det andra problemet är att fylla i fältet Antal för de saknade poster.

Problem 1:Detta kan lösas genom att antingen använda en Dates Lookup table eller genom att skapa ett recursive common table expression . Jag skulle rekommendera att skapa en Date Lookup-tabell för detta om det är ett alternativ. Om du inte kan skapa en sådan tabell, kommer du att behöva något liknande det här.

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 borde skapa dig en lista över datum som börjar med MIN datum i tabellen och slutar med MAX .

Problem 2:Här är en correlated subquery skulle vara praktiskt (så mycket som jag i allmänhet håller mig borta från dem) för att få den sista cnt från ditt ursprungliga bord:

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


  1. Förhindra dubbletter av poster till en tabell med PHP

  2. SQL SUM() för nybörjare

  3. Pl/Sql Trigger för att ändra standarddatumformat i Oracle

  4. Hur man reparerar en skadad Access-databas