Jag skulle börja med att bygga en Numbers-tabell som innehåller sekventiella heltal från 1 till en miljon eller så. De kommer väl till pass när du väl får kläm på det.
Så här får du till exempel den 1:a varje månad 2008:
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
Nu kan du sätta ihop det med OUTER APPLY för att hitta den senaste transaktionen för varje datum så här:
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;
Det här borde ge dig det du letar efter, men du kanske måste googla runt lite för att hitta det bästa sättet att skapa Numbers-tabellen.