Ich würde damit beginnen, eine Zahlentabelle zu erstellen, die aufeinanderfolgende ganze Zahlen von 1 bis zu einer Million oder so enthält. Sie sind wirklich praktisch, sobald Sie den Dreh raus haben.
So erhalten Sie zum Beispiel den 1. jedes Monats im Jahr 2008:
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
Jetzt können Sie das mit OUTER APPLY zusammensetzen, um die letzte Transaktion für jedes Datum wie folgt zu finden:
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;
Dies sollte Ihnen das geben, wonach Sie suchen, aber Sie müssen möglicherweise ein wenig googeln, um den besten Weg zum Erstellen der Numbers-Tabelle zu finden.