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

Sådan bestemmes værdier for manglende måneder baseret på data fra tidligere måneder i T-SQL

Jeg ville starte med at bygge en taltabel med sekventielle heltal fra 1 til en million eller deromkring. De er virkelig nyttige, når du først får styr på det.

For eksempel, her er, hvordan du får den 1. i hver måned i 2008:

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

Nu kan du sammensætte det ved at bruge OUTER APPLY for at finde den seneste transaktion for hver dato som sådan:

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;

Dette burde give dig det, du leder efter, men du skal muligvis Google lidt for at finde den bedste måde at oprette Numbers-tabellen på.



  1. Nærhedssøgning

  2. hvordan man udgiver c#-vindueapplikationsinstallationsprogram

  3. MySQL:Sådan bulker du SELECT rækker med flere par i WHERE-klausulen

  4. Formater et tal som valuta i SQLite