Začal bych tím, že vytvořím tabulku Numbers obsahující sekvenční celá čísla od 1 do milionu nebo tak nějak. Když se do toho pustíte, budou se vám opravdu hodit.
Zde je například návod, jak získat 1. den každého měsíce v roce 2008:
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
Nyní to můžete dát dohromady pomocí OUTER APPLY a najít nejnovější transakci pro každé datum, například takto:
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;
To by vám mělo poskytnout to, co hledáte, ale možná budete muset trochu prohledat Google, abyste našli nejlepší způsob, jak vytvořit tabulku Numbers.