Tôi sẽ bắt đầu bằng cách xây dựng một bảng Numbers chứa các số nguyên tuần tự từ 1 đến một triệu hoặc lâu hơn. Chúng thực sự hữu ích khi bạn hiểu rõ.
Ví dụ:đây là cách lấy ngày 1 hàng tháng trong năm 2008:
select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;
Bây giờ, bạn có thể kết hợp điều đó lại với nhau bằng cách sử dụng ÁP DỤNG NGOÀI TRỜI để tìm giao dịch gần đây nhất cho mỗi ngày như sau:
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;
Điều này sẽ cung cấp cho bạn những gì bạn đang tìm kiếm, nhưng bạn có thể phải Google xung quanh một chút để tìm cách tốt nhất để tạo bảng Numbers.