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å.