इसे आजमाएं
SELECT d.y, d.m, p.cnt
FROM
(SELECT a.y, b.m
FROM (SELECT 2015 AS Y UNION ALL SELECT 2014 AS Y) a
CROSS JOIN (SELECT 1 AS m UNION ALL SELECT 2 AS m UNION ALL SELECT 3 AS m UNION ALL SELECT 4 AS m UNION ALL SELECT 5 AS m UNION ALL SELECT 6 AS m UNION ALL SELECT 7 AS m UNION ALL SELECT 8 AS m UNION ALL SELECT 9 AS m UNION ALL SELECT 10 AS m UNION ALL SELECT 11 AS m UNION ALL SELECT 12 AS m) b
WHERE CONCAT(a.y, '-', b.m, '-01') BETWEEN CURDATE() - INTERVAL 13 MONTH AND CURDATE() - INTERVAL 1 MONTH
ORDER BY 1, 2) d
LEFT OUTER JOIN
(SELECT YEAR(purchasedate) AS Y ,MONTH(purchasedate) AS m, COUNT(*) cnt FROM purchase WHERE productid=1001 AND purchasedate >= CURDATE() - INTERVAL 1 YEAR GROUP BY m, Y) p ON d.m=p.m AND d.y=p.y
ORDER BY 1 DESC, 2
आप कुछ भी गलत नहीं कर रहे हैं, लेकिन MySQL उन महीनों के लिए पंक्तियों को वापस नहीं कर सकता जो आपके डेटा-सेट में मौजूद नहीं हैं। इस समस्या को हल करने के लिए, आपको अपने सभी महीनों को स्वयं प्रदान करना होगा (तालिका d
इस क्वेरी में) और LEFT JOIN
उन्हें आपके डेटा-सेट के परिणामों के साथ