लापता महीनों को पूरा करने के लिए, इसमें शामिल होने के लिए एक टेम्पलेट तालिका बनाएं।
इसे कैशिंग के रूप में सोचें। लूप करने और कमियों को भरने के बजाय, बस एक कैलेंडर को अपने डेटाबेस में कैश्ड रखें।
आप कई कैलेंडर (महीने की शुरुआत, सप्ताह की शुरुआत, बैंक अवकाश, कार्य दिवस, आदि) को एक तालिका में खोज फ़्लैग और इंडेक्स के समूह के साथ जोड़ सकते हैं।
आप कुछ इस तरह के साथ समाप्त होते हैं...
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