यह समाधान कोई लूप, प्रक्रिया या अस्थायी तालिकाओं का उपयोग नहीं करता . सबक्वायरी पिछले 10,000 दिनों के लिए दिनांक उत्पन्न करती है, और इसे आपकी इच्छानुसार आगे या पीछे जाने के लिए बढ़ाया जा सकता है।
select a.Date
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d
) a
where a.Date between '2010-01-20' and '2010-01-24'
आउटपुट:
Date
----------
2010-01-24
2010-01-23
2010-01-22
2010-01-21
2010-01-20
प्रदर्शन पर नोट्स
इसका परीक्षण करना यहां , प्रदर्शन आश्चर्यजनक रूप से अच्छा है:उपरोक्त क्वेरी में 0.0009 सेकंड लगते हैं।
यदि हम लगभग उत्पन्न करने के लिए सबक्वेरी का विस्तार करते हैं। 100,000 नंबर (और इस प्रकार लगभग 274 साल की तारीखें), यह 0.0458 सेकंड में चलता है।
संयोग से, यह एक बहुत ही पोर्टेबल तकनीक है जो मामूली समायोजन वाले अधिकांश डेटाबेस के साथ काम करती है।
SQL Fiddle उदाहरण जो 1,000 दिन लौटा रहा है