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

So ermitteln Sie Werte für fehlende Monate basierend auf Daten früherer Monate in T-SQL

Ich würde damit beginnen, eine Zahlentabelle zu erstellen, die aufeinanderfolgende ganze Zahlen von 1 bis zu einer Million oder so enthält. Sie sind wirklich praktisch, sobald Sie den Dreh raus haben.

So erhalten Sie zum Beispiel den 1. jedes Monats im Jahr 2008:

select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;

Jetzt können Sie das mit OUTER APPLY zusammensetzen, um die letzte Transaktion für jedes Datum wie folgt zu finden:

with Dates as (
    select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
    from Numbers
    where n <= 12
)
select d.firstOfMonth, t.TransactionValue
from Dates d
outer apply (
    select top 1 TransactionValue
    from Transactions
    where TransactionDate <= d.firstOfMonth
    order by TransactionDate desc
) t;

Dies sollte Ihnen das geben, wonach Sie suchen, aber Sie müssen möglicherweise ein wenig googeln, um den besten Weg zum Erstellen der Numbers-Tabelle zu finden.