Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment déterminer les valeurs des mois manquants en fonction des données des mois précédents dans T-SQL

Je commencerais par construire une table de nombres contenant des entiers séquentiels de 1 à un million environ. Ils sont très utiles une fois que vous avez compris.

Par exemple, voici comment obtenir le 1er de chaque mois en 2008 :

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

Maintenant, vous pouvez assembler cela en utilisant OUTER APPLY pour trouver la transaction la plus récente pour chaque date comme ceci :

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;

Cela devrait vous donner ce que vous cherchez, mais vous devrez peut-être chercher un peu sur Google pour trouver le meilleur moyen de créer le tableau des nombres.