まず、1から100万程度の整数を保持するNumbersテーブルを作成します。一度コツをつかめば、とても便利です。
たとえば、2008年の毎月1日を取得する方法は次のとおりです。
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
これで、OUTER APPLYを使用してそれをまとめ、次のように各日付の最新のトランザクションを見つけることができます。
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;
これであなたが探しているものが得られるはずですが、Numbersテーブルを作成するための最良の方法を見つけるために少しGoogleに行く必要があるかもしれません。