Ik zou beginnen met het bouwen van een Numbers-tabel met opeenvolgende gehele getallen van 1 tot een miljoen of zo. Ze zijn erg handig als je het eenmaal onder de knie hebt.
Hier ziet u bijvoorbeeld hoe u de 1e van elke maand in 2008 kunt ontvangen:
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
Nu kun je dat samenvoegen met OUTER APPLY om de meest recente transactie voor elke datum te vinden, zoals:
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;
Dit zou u moeten geven waarnaar u op zoek bent, maar u moet misschien een beetje Googlen om de beste manier te vinden om de Numbers-tabel te maken.