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

Come determinare i valori per i mesi mancanti in base ai dati dei mesi precedenti in T-SQL

Inizierei costruendo una tabella di numeri contenente numeri interi sequenziali da 1 a un milione circa. Sono davvero utili una volta che ci prendi la mano.

Ad esempio, ecco come ottenere il primo giorno di ogni mese nel 2008:

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

Ora puoi metterlo insieme usando OUTER APPLY per trovare la transazione più recente per ogni data in questo modo:

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;

Questo dovrebbe darti quello che stai cercando, ma potresti dover cercare un po' su Google per trovare il modo migliore per creare la tabella di Numbers.