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

कुल दिनांक सीमा से अधिक चल रहा है - छूटी हुई तिथियां भरें

लापता महीनों को पूरा करने के लिए, इसमें शामिल होने के लिए एक टेम्पलेट तालिका बनाएं।

इसे कैशिंग के रूप में सोचें। लूप करने और कमियों को भरने के बजाय, बस एक कैलेंडर को अपने डेटाबेस में कैश्ड रखें।

आप कई कैलेंडर (महीने की शुरुआत, सप्ताह की शुरुआत, बैंक अवकाश, कार्य दिवस, आदि) को एक तालिका में खोज फ़्लैग और इंडेक्स के समूह के साथ जोड़ सकते हैं।

आप कुछ इस तरह के साथ समाप्त होते हैं...

SELECT
  calendar.date,
  SUM(data.amt)
FROM
  calendar
LEFT JOIN
  data
    ON  data.date >= calendar.date
    AND data.date <  calendar.date + INTERVAL 1 MONTH
WHERE
      calendar.date >= '20110101'
  AND calendar.date <  '20120101'
GROUP BY
  calendar.date

संपादित करें

मैंने अभी देखा है कि ओपी एक रनिंग टोटल चाहता है।

यह SQL में संभव है लेकिन यह अत्यंत है अक्षम इसका कारण यह है कि एक महीने के परिणाम का उपयोग अगले महीने की गणना के लिए नहीं किया जाता है। इसके बजाय पूरे रनिंग-टोटल की फिर से गणना करनी होगी।

इस कारण से यह आमतौर पर दृढ़ता से अनुशंसा की जाती है कि आप ऊपर दिए गए मासिक कुल की गणना करें, फिर अपने आवेदन का उपयोग करके पुनरावृति करें और चल रहे कुल मान बनाएं।

अगर आप वास्तव में इसे SQL में करना चाहिए, यह कुछ ऐसा होगा...

SELECT
  calendar.date,
  SUM(data.amt)
FROM
  calendar
LEFT JOIN
  data
    ON  data.date >= @yourFirstDate
    AND data.date <  calendar.date + INTERVAL 1 MONTH
WHERE
      calendar.date >= @yourFirstDate
  AND calendar.date <  @yourLastDate
GROUP BY
  calendar.date


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL के साथ सी # में कुछ गलत होने पर मेरा लेनदेन रोलबैक नहीं है?

  2. एक्ज़ीक्यूटिव के साथ डेटा मैनिपुलेशन स्टेटमेंट जारी नहीं कर सकता ()

  3. WHERE जॉइन पर क्लॉज एक्ज़ीक्यूशन टाइम में 4 सेकंड जोड़ रहा है

  4. MySQLi ने स्टेटमेंट तैयार किए और INTO

  5. शीर्ष 5 MySQL GUI उपकरण (निःशुल्क और सशुल्क)