सबक्वेरी के साथ MAX() का उपयोग करके नवीनतम तारीख खोजना
अंतिम तारीख यानी नवीनतम तारीख प्राप्त करने के लिए, सबक्वेरी के साथ एग्रीगेट फंक्शन MAX() का उपयोग करें।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ExpiryDate DATE
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable (ExpiryDate) VALUES ('2018-12-31');
mysql> INSERT INTO DemoTable (ExpiryDate) VALUES ('2019-09-01');
mysql> INSERT INTO DemoTable (ExpiryDate) VALUES ('2019-09-01');
mysql> INSERT INTO DemoTable (ExpiryDate) VALUES ('2016-08-30');
mysql> INSERT INTO DemoTable (ExpiryDate) VALUES ('2019-06-23');
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+------------+ | Id | ExpiryDate | +----+------------+ | 1 | 2018-12-31 | | 2 | 2019-09-01 | | 3 | 2019-09-01 | | 4 | 2016-08-30 | | 5 | 2019-06-23 | +----+------------+
अंतिम तारीख वाले रिकॉर्ड्स खोजने के लिए क्वेरी:
mysql> SELECT * FROM DemoTable
WHERE ExpiryDate = (SELECT MAX(ExpiryDate) FROM DemoTable);
आउटपुट:
+----+------------+ | Id | ExpiryDate | +----+------------+ | 2 | 2019-09-01 | | 3 | 2019-09-01 | +----+------------+
व्याख्या:
- सबक्वेरी:
SELECT MAX(ExpiryDate) FROM DemoTableटेबल में अधिकतम (नवीनतम) तारीख ढूंढती है: 2019-09-01 - मुख्य क्वेरी: उन सभी पंक्तियों को चुनती है जिनकी ExpiryDate इस अधिकतम तारीख के बराबर है
- दोनों पंक्तियाँ (Id 2 और 3) दिखाई जाती हैं क्योंकि दोनों की तारीख 2019-09-01 है
वैकल्पिक तरीके:
-- तरीका 1: ORDER BY LIMIT (सबसे नवीनतम 1 रिकॉर्ड के लिए) SELECT * FROM DemoTable ORDER BY ExpiryDate DESC LIMIT 1; -- तरीका 2: JOIN के साथ (बड़े टेबल्स के लिए अधिक कुशल) SELECT d.* FROM DemoTable d JOIN (SELECT MAX(ExpiryDate) AS max_date FROM DemoTable) m ON d.ExpiryDate = m.max_date;
सबक्वेरी तरीका सरल और पठनीय है, लेकिन बहुत बड़े टेबल्स पर JOIN तरीका तेज हो सकता है।