दिलचस्प पोस्ट
अजगर पर नकारात्मक संख्या का घनराल जड़ सिंटेक्स त्रुटि: सख्त मोड में const का उपयोग करें? कोटलिन में, नलनीय मूल्यों से निपटने के लिए मुहावरेदार तरीका क्या है, उन्हें संदर्भित करना या परिवर्तित करना ओपनURL काम एक्सटेंशन में काम नहीं करता क्यों नहीं चार। स्ट्रिंग की तरह खाली है। खाली? IPhone और Android पर जावास्क्रिप्ट के माध्यम से एक उंगली से ज़ोर से मारना खोजें सी ++ में बढ़ती टेक्स्ट फाइल कैसे पढ़ी जा सकती है? किसी दृश्य को एंड्रॉइड में प्रदर्शित किए बिना बिटमैप में परिवर्तित करना? स्प्रिंग बूट और एनोटेशन के साथ ViewResolver को कॉन्फ़िगर करें, URI त्रुटि के साथ HTTP अनुरोध के लिए कोई मानचित्रण नहीं मिला Apache HttpClient 4.0 में SSL प्रमाणपत्र त्रुटियों को कैसे अनदेखा करें Data.MemoCombinators कैसे काम करता है? शैली इनपुट प्रकार फ़ाइल? <Select> ड्रॉपडाउन विकल्प में लिंक आईओएस सिम्युलेटर आवेदन को स्थापित करने में विफल रहा क्या jQuery के लिए एक हैंडल है। Delegate ('hover')?

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

किसी रेंज में दिनांक की एक श्रृंखला बनाने के लिए सबसे अच्छा तरीका क्या है 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 

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

Solutions Collecting From Web of "तिथियों की एक श्रृंखला उत्पन्न करना"

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

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

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

 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'