Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql अंतराल का उपयोग करके महीने के आधार पर समूहीकृत डेटा प्राप्त करें

इसे आजमाएं

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 उन्हें आपके डेटा-सेट के परिणामों के साथ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या गतिशील विदेशी कुंजी होना संभव है, और ऐसा करने के लिए सबसे अच्छा/सही क्या है?

  2. एक परिणाम लौटने के लिए बाएं शामिल होने को सीमित करना?

  3. पायथन और MySQL डेटाबेस:एक व्यावहारिक परिचय

  4. MySQL/PHP foreach अभी भी केवल डेटाबेस में पहले प्रदर्शित हो रहा है

  5. क्या दूसरी क्वेरी जोड़कर वास्तव में SQL इंजेक्शन संभव है?