दो बातें।
सबसे पहले, अगर आप WHERE MONTH(wydatki.data_zakupu) = MONTH(CURRENT_DATE())
का इस्तेमाल करना बंद कर देते हैं अपनी तिथियां चुनने के लिए आपको तीन लाभ मिलेंगे।
- आपकी तिथि खोज sargable हो जाएगी :एक सूचकांक इसे गति देगा।
- महीनों को चुनने के लिए आपको अधिक सामान्य योजना मिलेगी।
- यदि आपके टेबल में कई वर्षों का डेटा है, तो चीजें बेहतर तरीके से काम करेंगी।
इसके बजाय, सामान्य तौर पर वर्तमान माह की खोज के लिए इस प्रकार की अभिव्यक्ति का उपयोग करें। इसका अधिकांश भाग आप पहले ही समझ चुके हैं।
WHERE wydatki.data_zakupu >= LAST_DAY(CURRENT_DATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND wydatki.data_zakupu < LAST_DAY(CURRENT_DATE()) + INTERVAL 1 DAY - INTERVAL 0 MONTH
यह सभी डेटाटाइम मानों को वर्तमान माह के पहले दिन या उससे पहले मध्यरात्रि को या उसके बाद देखता है, लेकिन <
पर नहीं , अगले महीने के पहले दिन मध्यरात्रि.
यह आपके इच्छित किसी भी महीने के लिए सामान्यीकृत होता है। उदाहरण के लिए,
WHERE wydatki.data_zakupu >= LAST_DAY(CURRENT_DATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
AND wydatki.data_zakupu < LAST_DAY(CURRENT_DATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
आपको पिछले महीने मिलता है। यह तब भी काम करता है जब चालू माह जनवरी है, और यह तब काम करता है जब आपके टेबल में कई वर्षों का डेटा होता है।
ये अभिव्यक्तियाँ थोड़ी क्रियात्मक हैं क्योंकि MySQL में FIRST_DAY(date)
नहीं है फ़ंक्शन, केवल a LAST_DAY(date)
समारोह
. इसलिए हमें सभी की जरूरत है + INTERVAL 1 DAY
बंदर व्यवसाय
।
दूसरा, पिछले महीने का डेटा निकालना उतना ही आसान है जितना कि एक और LEFT JOIN ( SELECT...
जोड़ना। अपनी मेज के लिए खंड, जैसे। (http://sqlfiddle.com/#!9/676df4/13
)
SELECT ...
coalesce(month1.tot, 0) AS LastMonth
FROM wydatki_kategorie cat
LEFT JOIN
...
LEFT JOIN
(SELECT wydatki_wpisy.kategoria,
sum(wydatki_wpisy.brutto) AS tot
FROM wydatki_wpisy
LEFT JOIN wydatki ON wydatki_wpisy.do_wydatku = wydatki.id_wydatku
WHERE wydatki.data_zakupu >= LAST_DAY(CURRENT_DATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
AND wydatki.data_zakupu < LAST_DAY(CURRENT_DATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
AND wydatki.id_kupujacy = 1
GROUP BY wydatki_wpisy.kategoria
) month1 ON cat.id_kat = month1.kategoria
जैसा कि आप देख सकते हैं, दिनांक सीमा WHERE
क्लॉज यहां पिछले महीने की पंक्तियों को प्राप्त करता है।