दिलचस्प पोस्ट
पॉलिमर 1.0 में सरणियों के बजाय वस्तुओं के साथ डोम-दोहराने का उपयोग कैसे करें? WebBrowser नियंत्रण पर DrawToBitmap के साथ एक अस्पष्टता बग को ठीक कैसे करें? हम हमेशा SQL कथन में मापदंडों का उपयोग क्यों करते हैं? jQuery स्क्रॉल पर अधिक डेटा लोड करें जेपीएनएल ने फिर से रंगना समस्या एप्लिकेशन संदर्भ प्रारंभिक ईवेंट में एक हुक जोड़ने के लिए कैसे? आईएसओ 8601 दिनांक स्वरूप पार्सिंग जैसे 2015-06-27 टी 13: 16: 37.363 जे जावा में हिस्टोग्राम पेप्पललिब कैसे gwt में कैश को साफ करने के लिए? एक डेटा फ्रेम के एक कॉलम को कई कॉलम में विभाजित करें MongoDB में डेटा संस्करण को लागू करने के तरीके java.lang.NoClassDefFound त्रुटि: कक्षा XXX को प्रारंभ नहीं किया जा सका AngularJS: ऊँचाई परिवर्तन के लिए देखने का बेहतर तरीका जावास्क्रिप्ट समापन और 'यह' LocalBroadcastManager का उपयोग कैसे करें?

तिथियों की एक श्रृंखला उत्पन्न करना

किसी रेंज में दिनांक की एक श्रृंखला बनाने के लिए सबसे अच्छा तरीका क्या है mysql?

मुझे जो दिमाग में है, वह रिपोर्ट एक रिपोर्ट क्वेरी लिखना है जो हर तिथि के लिए एक पंक्ति देता है, भले ही रिपोर्ट करने के लिए कोई डेटा मौजूद न हो। अपने सरल रूप में:

select dates.date, sum(sales.amount) from <series of dates between X and Y> dates left join sales on date(sales.created) = dates.date group by 1 

मैंने बहुत सारी तिथियों के साथ एक टेबल बनाने की कोशिश की है, लेकिन ऐसा लगता है कि एक खराब परिपाटी है

वेब के समाधान से एकत्रित समाधान "तिथियों की एक श्रृंखला उत्पन्न करना"

मुझे लगता है कि एक कैलेंडर सारणी एक अच्छा विचार है; आप बहुत अधिक रिपोर्टिंग और क्वेरी कार्यक्षमता हासिल कर सकते हैं, खासकर जब स्पैर्स डेटा श्रेणी को भरना

मुझे इस लेख के साथ मिला जो एक अच्छा उदाहरण है।

आप एक चर उत्पन्न दिनांक श्रृंखला का उपयोग कर सकते हैं:

 Set @i:=0; SELECT DATE(DATE_ADD(X, INTERVAL @i:=@i+1 DAY) ) AS datesSeries FROM yourtable, (SELECT @i:=0) r where @i < DATEDIFF(now(), date Y) ; 

यकीन नहीं है कि यह वही है जो आपने किया है 🙂 हालांकि

left join लिए तालिका के रूप में उपर्युक्त क्वेरी से ऊपर अगला उपयोग करें:

 set @i:=0; select d.dates, sum(s.amount) as TotalAmount from( SELECT DATE(DATE_ADD(X, INTERVAL @i:=@i+1 DAY) ) AS dateSeries FROM Sales, (SELECT @i:=0) r where @i < DATEDIFF(now(), date Y) ) dates d left join Sales s on Date(s.Created) = Date(d.dateSeries) group by 1 ; 

आप दिनांक श्रृंखला तैयार करने के लिए अस्थायी तालिका का भी उपयोग कर सकते हैं। क्वेरी नीचे जांचें:

 CREATE TEMPORARY TABLE daterange (dte DATE); SET @counter := -1; WHILE (@counter < DATEDIFF(DATE(_todate), DATE(_fromdate))) DO INSERT daterange VALUES (DATE_ADD(_fromdate, INTERVAL @counter:=@counter + 1 DAY)); END WHILE; SELECT dates.dte, SUM(sales.amount) FROM daterange dates LEFT JOIN sales ON DATE(sales.created) = dates.date GROUP BY dates.dte; 

यदि आप मेरे जैसे हालात में हैं जहां अस्थायी तालिकाओं का निर्माण निषिद्ध है , और वैरिएबल सेट करने की अनुमति भी नहीं है , लेकिन आप किसी विशिष्ट अवधि में तारीखों की एक सूची तैयार करना चाहते हैं, तो वर्तमान वर्ष में कुछ एकत्रीकरण करने के लिए कहें, इसका उपयोग करें

 select * from (select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) gen_date from (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v where gen_date between '2017-01-01' and '2017-12-31'