MySQL में अगली आगामी तिथि ढूंढना
वर्तमान दिनांक के बाद की अगली निकटतम तिथि ढूंढने के लिए, भविष्य की तिथियों को प्राथमिकता देने और फिर निकटतम को क्रमबद्ध करने के लिए CASE स्टेटमेंट के साथ ORDER BY का उपयोग करें।
उदाहरण: अगली शिपिंग तिथि ढूंढना
mysql> CREATE TABLE DemoTable1454 (
-> ShippingDate DATE
-> );
Query OK, 0 rows affected (0.59 sec)
mysql> INSERT INTO DemoTable1454 VALUES
-> ('2019-10-01'), ('2019-10-03'), ('2019-10-05'),
-> ('2019-10-04'), ('2018-10-06'), ('2019-10-06');
Query OK, 6 rows affected (0.22 sec)
mysql> SELECT * FROM DemoTable1454;
+--------------+
| ShippingDate |
+--------------+
| 2019-10-01 |
| 2019-10-03 |
| 2019-10-05 |
| 2019-10-04 |
| 2018-10-06 |
| 2019-10-06 |
+--------------+
6 rows in set (0.00 sec)
mysql> SELECT NOW();
+---------------------+
| now() |
+---------------------+
| 2019-10-04 21:30:01 |
+---------------------+
1 row in set (0.00 sec)
जटिल ORDER BY के साथ अगली तिथि क्वेरी
mysql> SELECT * FROM DemoTable1454
-> ORDER BY (ShippingDate > NOW()) DESC,
-> (CASE WHEN ShippingDate > NOW() THEN ShippingDate END),
-> ShippingDate DESC
-> LIMIT 1;
परिणाम
+--------------+ | ShippingDate | +--------------+ | 2019-10-05 | +--------------+ 1 row in set (0.00 sec)
ORDER BY तर्क समझाया गया
(ShippingDate > NOW()) DESC- भविष्य की तिथियाँ पहले (सत्य=1, असत्य=0, DESC → 1 पहले)CASE WHEN ShippingDate > NOW() THEN ShippingDate END- भविष्य की तिथियों को आरोही क्रम में क्रमबद्ध करता है (निकटतम पहले)ShippingDate DESC- टाई-ब्रेकर: भूतपूर्व तिथियों के लिए नवीनतम पहलेLIMIT 1- केवल शीर्ष परिणाम लौटाता है
सरल विकल्प (MySQL 8.0+)
-- भविष्य की तिथियों को फ़िल्टर करें, फिर आरोही क्रम में क्रमबद्ध करें SELECT * FROM DemoTable1454 WHERE ShippingDate > CURDATE() ORDER BY ShippingDate ASC LIMIT 1;
किनारे के मामले
- कोई भविष्य की तिथि नहीं: नवीनतम भूतपूर्व तिथि लौटाता है (तीसरे ORDER BY के कारण)
- समान तिथियाँ: उनमें से पहली लौटाता है
- सभी भूतपूर्व: सबसे हाल की भूतपूर्व तिथि लौटाता है