Mysql में ऐसा करने का एक सुपर-सरल तरीका है:
select *
from (select * from mytable order by `Group`, age desc, Person) x
group by `Group`
यह काम करता है क्योंकि mysql में आपको गैर-समूह-स्तंभों को एकत्रित नहीं करने दिया जाता है, इस स्थिति में mysql सिर्फ पहली पंक्ति देता है। समाधान पहले डेटा को क्रमबद्ध करना है जैसे कि प्रत्येक समूह के लिए जो पंक्ति आप चाहते हैं वह पहले है, फिर उन कॉलमों के आधार पर समूह जिनके लिए आप मूल्य चाहते हैं।
आप जटिल उपश्रेणियों से बचते हैं जो max()
आदि को खोजने की कोशिश करते हैं , और कई पंक्तियों को वापस करने की समस्या भी होती है जब एक ही अधिकतम मूल्य के साथ एक से अधिक हो (जैसा कि अन्य उत्तर करेंगे)
नोट: यह एक mysql- केवल समाधान है। मुझे पता है कि सभी अन्य डेटाबेस "गैर कुल स्तंभ स्तंभ में समूह द्वारा सूचीबद्ध नहीं हैं" या इसी तरह के संदेश के साथ एक एसक्यूएल सिंटैक्स त्रुटि को फेंक देंगे। क्योंकि इस समाधान का उपयोग करता अप्रलेखित व्यवहार, और अधिक सतर्क ज़ोर के लिए एक परीक्षण शामिल करने के लिए चाहते हो सकता है कि यह बनी हुई है काम कर MySQL के भविष्य के संस्करण इस व्यवहार को बदलने चाहिए।
संस्करण 5.7 अद्यतन:
5.7 संस्करण के बाद से, sql-mode
सेटिंग शामिल हैONLY_FULL_GROUP_BY
डिफ़ॉल्ट रूप से है, इसलिए यह काम करने के लिए आपके पास यह विकल्प नहीं होना चाहिए (इस सेटिंग को हटाने के लिए सर्वर के लिए विकल्प फ़ाइल को संपादित करें)।