Để phục vụ cho những tháng còn thiếu, hãy tạo một bảng mẫu để kết hợp với nhau.
Hãy coi nó như bộ nhớ đệm. Thay vì lặp lại và lấp đầy khoảng trống, chỉ cần lưu một lịch vào bộ nhớ cache trong cơ sở dữ liệu của bạn.
Bạn thậm chí có thể kết hợp nhiều lịch (đầu tháng, đầu tuần, ngày nghỉ ngân hàng, ngày làm việc, v.v.) tất cả vào một bảng, với một loạt các cờ và chỉ mục tìm kiếm.
Bạn kết thúc với một cái gì đó giống như ...
SELECT
calendar.date,
SUM(data.amt)
FROM
calendar
LEFT JOIN
data
ON data.date >= calendar.date
AND data.date < calendar.date + INTERVAL 1 MONTH
WHERE
calendar.date >= '20110101'
AND calendar.date < '20120101'
GROUP BY
calendar.date
CHỈNH SỬA
Tôi chỉ nhận thấy rằng OP muốn một tổng số đang chạy.
Điều này-có thể xảy ra trong SQL nhưng nó là cực kỳ không hiệu quả. Lý do là kết quả của một tháng không được sử dụng để tính cho tháng tiếp theo. Thay vào đó, toàn bộ tổng số lần chạy phải được tính toán lại.
Vì lý do này, bạn nên tính tổng số tiền hàng tháng như trên, sau đó sử dụng ứng dụng của bạn để duyệt qua và tạo ra các giá trị tổng đang chạy.
Nếu bạn thực sự phải làm điều đó trong SQL, nó sẽ giống như ...
SELECT
calendar.date,
SUM(data.amt)
FROM
calendar
LEFT JOIN
data
ON data.date >= @yourFirstDate
AND data.date < calendar.date + INTERVAL 1 MONTH
WHERE
calendar.date >= @yourFirstDate
AND calendar.date < @yourLastDate
GROUP BY
calendar.date