MySQL में पुनरावर्ती कार्यक्षमता नहीं है, इसलिए आपके पास NUMBERS टेबल ट्रिक का उपयोग करना शेष है -
-
एक तालिका बनाएं जिसमें केवल वृद्धिशील संख्याएं हों - auto_increment का उपयोग करके करना आसान:
DROP TABLE IF EXISTS `example`.`numbers`; CREATE TABLE `example`.`numbers` ( `id` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
तालिका का उपयोग करके पॉप्युलेट करें:
INSERT INTO NUMBERS (id) VALUES (NULL)
...जितने मूल्यों की आपको आवश्यकता है।
-
DATE_ADD तारीखों की सूची बनाने के लिए, NUMBERS.id मान के आधार पर दिनों को बढ़ाते हुए। "2010-01-01" और "2010-03-01" को अपनी संबंधित आरंभ और समाप्ति तिथियों से बदलें (लेकिन उसी प्रारूप का उपयोग करें, YYYY-MM-DD) -
SELECT x.* FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) FROM numbers n WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x
-
डेटाटाइम भाग के आधार पर अपने डेटा तालिका में बाएं शामिल हों:
SELECT DATE(x.dt) AS dt, COALESCE(SUM(e.value), 0) AS sum_value FROM (SELECT DATE_ADD('2010-01-01', INTERVAL n.id - 1 DAY) AS dt FROM numbers n WHERE DATE_ADD('2010-01-01', INTERVAL n.id -1 DAY) <= '2010-03-01' ) x LEFT JOIN ENTRY e ON DATE(e.datetime) = x.dt AND e.entryid = 85 GROUP BY DATE(x.dt)
नंबर क्यों, तारीखें क्यों नहीं?
सरल - संख्या के आधार पर तिथियां उत्पन्न की जा सकती हैं, जैसे मैंने प्रदान किए गए उदाहरण में। इसका अर्थ एकल तालिका का उपयोग करना, बनाम प्रति डेटा प्रकार एक कहना है।