За да се погрижите за липсващите месеци, създайте шаблонна таблица, към която да се присъедините.
Мислете за това като за кеширане. Вместо да преглеждате и попълвате празнини, просто имайте кеширан календар във вашата база данни.
Можете дори да комбинирате множество календари (начало на месеца, начало на седмицата, празници, работен ден и т.н.) всички в една таблица, с куп флагове и индекси за търсене.
В крайна сметка получавате нещо като...
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
РЕДАКТИРАНЕ
Току-що забелязах, че ОП иска текуща сума.
Това е възможно в SQL, но е изключително неефикасен. Причината е, че резултатът от един месец не се използва за изчисляване на следващия месец. Вместо това цялата текуща сума трябва да се изчисли отново.
Поради тази причина обикновено силно се препоръчва да изчислите месечната обща сума, както е посочено по-горе, след което да използвате приложението си, за да преглеждате и правите текущите общи стойности.
Ако наистина трябва да го направя в SQL, би било нещо като...
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