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 `example`.`numbers` ( `id` ) VALUES ( NULL )
...जितने मूल्यों की आपको आवश्यकता है।
-
DATE_ADD तारीखों की सूची बनाने के लिए, NUMBERS.id मान के आधार पर दिनों को बढ़ाते हुए। "2010-06-06" और "2010-06-14" को अपनी संबंधित आरंभ और समाप्ति तिथियों से बदलें (लेकिन उसी प्रारूप का उपयोग करें, YYYY-MM-DD) -
SELECT `x`.* FROM (SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14' ) x
-
समय भाग के आधार पर अपने डेटा तालिका में बाएं शामिल हों:
SELECT `x`.`ts` AS `timestamp`, COALESCE(`y`.`score`, 0) AS `cnt` FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%m/%d/%Y') AS `ts` FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x LEFT JOIN TABLE `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = `x`.`ts`
यदि आप दिनांक स्वरूप को बनाए रखना चाहते हैं, तो DATE_FORMAT फ़ंक्शन :
DATE_FORMAT(`x`.`ts`, '%d.%m.%Y') AS `timestamp`