MySQL में GROUP BY और ORDER BY MAX() का उपयोग करके विशिष्ट मान चुनें और उन्हें अधिकतम ID के अवरोही क्रम में क्रमबद्ध करें।
उदाहरण: टेबल बनाना और डुप्लिकेट डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Id INT,
-> Name VARCHAR(100)
-> );
Query OK, 0 rows affected (0.81 sec)
mysql> INSERT INTO DemoTable VALUES
-> (10, 'John'), (10, 'John'), (20, 'Sam'), (20, 'Sam'), (30, 'David'), (30, 'David');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट
+------+-------+ | Id | Name | +------+-------+ | 10 | John | | 10 | John | | 20 | Sam | | 20 | Sam | | 30 | David | | 30 | David | +------+-------+ 6 rows in set (0.00 sec)
विशिष्ट नाम, अधिकतम ID के अवरोही क्रम में, शीर्ष 2
mysql> SELECT Name FROM DemoTable
-> GROUP BY Name
-> ORDER BY MAX(Id) DESC
-> LIMIT 2;
आउटपुट
+-------+ | Name | +-------+ | David | | Sam | +-------+ 2 rows in set (0.06 sec)
व्याख्या:
GROUP BY Name- प्रत्येक नाम के लिए एक पंक्तिMAX(Id)- प्रत्येक नाम समूह में अधिकतम ID (30=David, 20=Sam, 10=John)ORDER BY MAX(Id) DESC- अधिकतम ID के घटते क्रम में (David पहले)LIMIT 2- शीर्ष 2
उपयोग का मामला: प्रत्येक उपयोगकर्ता का नवीनतम पोस्ट प्राप्त करना, प्रत्येक श्रेणी का नवीनतम उत्पाद, आदि।
MySQL 8.0+ विंडो फ़ंक्शन विकल्प (अधिक लचीला):
SELECT Name FROM (
SELECT Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id DESC) AS rn
FROM DemoTable
) t WHERE rn = 1
ORDER BY Id DESC LIMIT 2;
यह प्रत्येक नाम की नवीनतम पंक्ति (पूर्ण पंक्ति डेटा के साथ) देता है, फिर क्रमबद्ध करता है।