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

MySQL में मिसिंग डेट्स कैसे भरें?

कई बार, हमें उन तिथियों के लिए लापता पंक्तियों को भरकर, MySQL डेटा में लापता तिथियों को भरने की आवश्यकता होती है। एक उचित बिक्री रिपोर्ट बनाने के लिए जिसमें कोई भी पंक्तियाँ नहीं हैं, लापता तिथियों और दिनांक अनुक्रम अंतराल को भरने का तरीका यहां दिया गया है।

MySQL में छूटी हुई तिथियों को कैसे भरें?

यहाँ MySQL में लापता तिथियों को भरने के चरण दिए गए हैं। मान लें कि आपके पास निम्न तालिका है बिक्री(order_date, बिक्री)

mysql> create table sales(order_date date,sale int);

mysql> insert into sales(order_date,sale) values('2020-04-01',212),
     ('2020-04-04',220),
     ('2020-04-05',120),
     ('2020-04-07',200),
     ('2020-04-08',222),
     ('2020-04-10',312),
     ('2020-04-11',225),
     ('2020-04-12',212);

mysql> select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-04-01 |  212 |
| 2020-04-04 |  220 |
| 2020-04-05 |  120 |
| 2020-04-07 |  200 |
| 2020-04-08 |  222 |
| 2020-04-10 |  312 |
| 2020-04-11 |  225 |
| 2020-04-12 |  212 |
+------------+------+

जैसा कि आप ऊपर दी गई तालिका में देख सकते हैं, 2 अप्रैल, 3, आदि जैसी कई तिथियों के लिए कोई डेटा नहीं है।

अगर हम इस डेटा को ग्राफ़ पर प्लॉट करने का प्रयास करते हैं, तो यह कुछ इस तरह दिखाई देगा

ऐसा ग्राफ़ भ्रामक हो सकता है क्योंकि यह लापता तिथियों के लिए कॉलम अंतराल नहीं दिखाता है।

बोनस पढ़ें:महीने के हिसाब से उत्पाद की बिक्री की तुलना करने के लिए SQL क्वेरी

MySQL में लापता दिनांक पंक्तियों को भरने के लिए, हमें एक सहायक तालिका बनाने की आवश्यकता होगी जिसमें सभी आवश्यक तिथियां हों, बिना किसी अनुक्रम अंतराल या लापता तिथियों के और फिर इसे हमारी बिक्री के साथ शामिल करें। टेबल।

यहां हमारी सहायक तालिका बनाने का तरीका बताया गया है कैलेंडर

mysql> CREATE TABLE calendar (datefield DATE);

mysql> insert into calendar(datefield) values('2020-04-01'),
     ('2020-04-02'),
     ('2020-04-03'),
     ('2020-04-04'),
     ('2020-04-05'),
     ('2020-04-06'),
     ('2020-04-07'),
     ('2020-04-08'),
     ('2020-04-09'),
     ('2020-04-10'),
     ('2020-04-11'),
     ('2020-04-12'),
     ('2020-04-13'),
     ('2020-04-14'),
     ('2020-04-15'),
     ('2020-04-16'),
     ('2020-04-17'),
     ('2020-04-18'),
     ('2020-04-19'),
     ('2020-04-20'),
     ('2020-04-21'),
     ('2020-04-22'),
     ('2020-04-23'),
     ('2020-04-24'),
     ('2020-04-25'),
     ('2020-04-26'),
     ('2020-04-27'),
     ('2020-04-28'),
     ('2020-04-29'),
     ('2020-04-30');

mysql> select * from calendar;
+------------+
| datefield  |
+------------+
| 2020-04-01 |
| 2020-04-02 |
| 2020-04-03 |
| 2020-04-04 |
| 2020-04-05 |
| 2020-04-06 |
| 2020-04-07 |
| 2020-04-08 |
| 2020-04-09 |
| 2020-04-10 |
| 2020-04-11 |
| 2020-04-12 |
| 2020-04-13 |
| 2020-04-14 |
| 2020-04-15 |
| 2020-04-16 |
| 2020-04-17 |
| 2020-04-18 |
| 2020-04-19 |
| 2020-04-20 |
| 2020-04-21 |
| 2020-04-22 |
| 2020-04-23 |
| 2020-04-24 |
| 2020-04-25 |
| 2020-04-26 |
| 2020-04-27 |
| 2020-04-28 |
| 2020-04-29 |
| 2020-04-30 |
+------------+

एक छोटा रास्ता . भी है कैलेंडर तालिका बनाने के लिए, यदि आप संग्रहीत कार्यविधियों का उपयोग करने में सहज हैं।

mysql> DELIMITER |
     CREATE PROCEDURE fill_calendar(start_date DATE, end_date DATE)
     BEGIN
       DECLARE crt_date DATE;
       SET crt_date=start_date;
       WHILE crt_date <= end_date DO INSERT INTO calendar VALUES(crt_date); 
    SET crt_date = ADDDATE(crt_date, INTERVAL 1 DAY); 
    END WHILE; END | 
    DELIMITER ;

आप कॉल फ़ंक्शन का उपयोग करके इस फ़ंक्शन को कॉल कर सकते हैं। 1 अप्रैल से 30 अप्रैल तक की तिथि सीमा के लिए,

mysql> CALL fill_calendar('2020-04-01', '2020-04-31');

बोनस पढ़ें:MySQL में प्रति माह बिक्री की गणना कैसे करें

अंत में, हम कैलेंडर . का LEFT जॉइन करते हैं बिक्री . के साथ तालिका MySQL में अनुपलब्ध दिनांक पंक्तियों को भरने के लिए।

mysql> select datefield,sum(sale) from calendar 
left join sales on datefield=order_date 
group by datefield;
+------------+-----------+
| datefield  | sum(sale) |
+------------+-----------+
| 2020-04-01 |       212 |
| 2020-04-02 |      NULL |
| 2020-04-03 |      NULL |
| 2020-04-04 |       220 |
| 2020-04-05 |       120 |
| 2020-04-06 |      NULL |
| 2020-04-07 |       200 |
| 2020-04-08 |       222 |
| 2020-04-09 |      NULL |
| 2020-04-10 |       312 |
| 2020-04-11 |       225 |
| 2020-04-12 |       212 |
| 2020-04-13 |      NULL |
| 2020-04-14 |      NULL |
| 2020-04-15 |      NULL |
| 2020-04-16 |      NULL |
| 2020-04-17 |      NULL |
| 2020-04-18 |      NULL |
| 2020-04-19 |      NULL |
| 2020-04-20 |      NULL |
| 2020-04-21 |      NULL |
| 2020-04-22 |      NULL |
| 2020-04-23 |      NULL |
| 2020-04-24 |      NULL |
| 2020-04-25 |      NULL |
| 2020-04-26 |      NULL |
| 2020-04-27 |      NULL |
| 2020-04-28 |      NULL |
| 2020-04-29 |      NULL |
| 2020-04-30 |      NULL |
+------------+-----------+

जैसा कि आप देख सकते हैं, उपरोक्त तालिका में सभी तिथियां हैं, उन पंक्तियों की बिक्री के साथ जहां डेटा मौजूद है और अनुपलब्ध दिनांक पंक्तियों के लिए NULL।

यदि आप इन NULLs को 0 से बदलना चाहते हैं, तो आप IFNULL फ़ंक्शन का उपयोग कर सकते हैं,

mysql> select datefield,IFNULL(sum(sale),0) 
from calendar left join sales on datefield=order_date 
group by datefield;
+------------+---------------------+
| datefield  | IFNULL(sum(sale),0) |
+------------+---------------------+
| 2020-04-01 |                 212 |
| 2020-04-02 |                   0 |
| 2020-04-03 |                   0 |
| 2020-04-04 |                 220 |
| 2020-04-05 |                 120 |
| 2020-04-06 |                   0 |
| 2020-04-07 |                 200 |
| 2020-04-08 |                 222 |
| 2020-04-09 |                   0 |
| 2020-04-10 |                 312 |
| 2020-04-11 |                 225 |
| 2020-04-12 |                 212 |
| 2020-04-13 |                   0 |
| 2020-04-14 |                   0 |
| 2020-04-15 |                   0 |
| 2020-04-16 |                   0 |
| 2020-04-17 |                   0 |
| 2020-04-18 |                   0 |
| 2020-04-19 |                   0 |
| 2020-04-20 |                   0 |
| 2020-04-21 |                   0 |
| 2020-04-22 |                   0 |
| 2020-04-23 |                   0 |
| 2020-04-24 |                   0 |
| 2020-04-25 |                   0 |
| 2020-04-26 |                   0 |
| 2020-04-27 |                   0 |
| 2020-04-28 |                   0 |
| 2020-04-29 |                   0 |
| 2020-04-30 |                   0 |
+------------+---------------------+

बोनस पढ़ें :MySQL में डायनामिक पिवट टेबल कैसे बनाएं

जब हम MySQL में लापता तिथियां भरते हैं, तो हमें भविष्य की तारीखों के लिए भी डेटा मिलेगा। अगर आप भी इन अतिरिक्त 0 पंक्तियों को हटाना चाहते हैं जो नवीनतम order_date . के बाद कैलेंडर में मौजूद हैं आप WHERE क्लॉज के साथ ऐसा कर सकते हैं

mysql> select datefield,IFNULL(sum(sale),0) 
from calendar left join sales on datefield=order_date 
where datefield 
between (SELECT MIN(DATE(order_date)) FROM sales) 
AND
 (SELECT MAX(DATE(order_date)) FROM sales) 
group by datefield;
+------------+---------------------+
| datefield  | IFNULL(sum(sale),0) |
+------------+---------------------+
| 2020-04-01 |                 212 |
| 2020-04-02 |                   0 |
| 2020-04-03 |                   0 |
| 2020-04-04 |                 220 |
| 2020-04-05 |                 120 |
| 2020-04-06 |                   0 |
| 2020-04-07 |                 200 |
| 2020-04-08 |                 222 |
| 2020-04-09 |                   0 |
| 2020-04-10 |                 312 |
| 2020-04-11 |                 225 |
| 2020-04-12 |                 212 |
+------------+---------------------+

MySQL में छूटी हुई तारीखों को भरने के बाद, आप इस डेटा को बार चार्ट या डैशबोर्ड पर प्लॉट करने के लिए रिपोर्टिंग टूल का उपयोग कर सकते हैं और इसे अपनी टीम के साथ साझा कर सकते हैं। यहां एक बार चार्ट का उदाहरण दिया गया है, जो Ubiq का उपयोग करके बनाई गई दैनिक बिक्री दिखाता है।

2 चार्ट में अंतर देखें!

यदि आप MySQL डेटाबेस से चार्ट, डैशबोर्ड और रिपोर्ट बनाना चाहते हैं, तो आप Ubiq को आज़मा सकते हैं। हम 14-दिन का निःशुल्क परीक्षण प्रदान करते हैं।

  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_fetch_array ():आपूर्ति किया गया तर्क मान्य MySQL परिणाम नहीं है

  2. MySQL:LIKE का उल्टा संस्करण क्या है?

  3. एकल कथन में जावा में निष्पादित एकाधिक प्रश्न

  4. MySQL ड्रॉप अद्वितीय बाधा

  5. MySQL में किसी तिथि में दिन कैसे जोड़ें