Saya akan mulai dengan membuat tabel Numbers yang menyimpan bilangan bulat berurutan dari 1 hingga satu juta atau lebih. Mereka sangat berguna setelah Anda menguasainya.
Sebagai contoh, berikut adalah cara mendapatkan tanggal 1 setiap bulan di tahun 2008:
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
Sekarang, Anda dapat menggabungkannya menggunakan OUTER APPLY untuk menemukan transaksi terbaru untuk setiap tanggal seperti:
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;
Ini akan memberikan apa yang Anda cari, tetapi Anda mungkin perlu sedikit menelusuri Google untuk menemukan cara terbaik membuat tabel Numbers.