Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पेश है पिछले महीने के योग के लिए एक नया कॉलम

दो बातें।

सबसे पहले, अगर आप WHERE MONTH(wydatki.data_zakupu) = MONTH(CURRENT_DATE()) का इस्तेमाल करना बंद कर देते हैं अपनी तिथियां चुनने के लिए आपको तीन लाभ मिलेंगे।

  1. आपकी तिथि खोज sargable हो जाएगी :एक सूचकांक इसे गति देगा।
  2. महीनों को चुनने के लिए आपको अधिक सामान्य योजना मिलेगी।
  3. यदि आपके टेबल में कई वर्षों का डेटा है, तो चीजें बेहतर तरीके से काम करेंगी।

इसके बजाय, सामान्य तौर पर वर्तमान माह की खोज के लिए इस प्रकार की अभिव्यक्ति का उपयोग करें। इसका अधिकांश भाग आप पहले ही समझ चुके हैं।

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 क्लॉज यहां पिछले महीने की पंक्तियों को प्राप्त करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP/MYSQL एकाधिक तालिकाओं में शामिल हों

  2. MySQL में परिणाम सेट पर लूपिंग

  3. अनुकूलन के लिए MySQL हैश इंडेक्स

  4. अनुदान विकल्प वाला उपयोगकर्ता उपयोगकर्ता बनाने की अनुमति नहीं दे सकता

  5. MySQL में BLOB कॉलम में मान खोजें