Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie füllt man fehlende Daten und Werte in partitionierten Daten aus?

Zuerst müssen Sie die Daten generieren. Dann können Sie alle Kombinationen aus Datum und Name generieren. Geben Sie abschließend die Werte ein. Hier ist ein Beispiel mit cross apply :

with dates as (
      select @MINDATE as thedate
      union all
      select dateadd(day, 1, thedate)
      from dates
      where dateadd(day, 1, thedate) <= getdate()
     )
select thedate, vals.val
from dates cross join
     (select distinct name from hypothetical) h cross apply
     (select top 1 val
      from hypothetical h2
      where h2.name = h.name and h2.date <= dates.thedate
      order by date desc
     ) vals;