इसे समूह-वार अधिकतम कॉलम का चयन करना कहा जाता है। यहां mysql के लिए कई अलग-अलग तरीके दिए गए हैं।
यहां बताया गया है कि मैं इसे कैसे करूंगा:
SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id
यह अपेक्षाकृत कुशल होगा, हालांकि MySQL सबक्वायरी के लिए स्मृति में एक अस्थायी तालिका तैयार करेगा। मुझे लगता है कि इस तालिका के लिए आपके पास पहले से ही एक अनुक्रमणिका (id, version_id) है।
SQL में यह कमी है कि आपको इस प्रकार की समस्या के लिए कमोबेश एक सबक्वेरी का उपयोग करना पड़ता है ( सेमी-जॉइन एक और उदाहरण हैं)।
सबक्वायरीज़ को MySQL में अच्छी तरह से ऑप्टिमाइज़ नहीं किया गया है, लेकिन असंबद्ध सबक्वेरीज़ इतनी खराब नहीं हैं जब तक कि वे इतनी बड़ी न हों कि वे मेमोरी के बजाय डिस्क पर लिखी जाएँगी। यह देखते हुए कि इस क्वेरी में केवल दो ints हैं सबक्वेरी ऐसा होने से बहुत पहले लाखों पंक्तियाँ हो सकती हैं लेकिन आपकी पहली क्वेरी में चुनिंदा * सबक्वेरी इस समस्या से बहुत जल्द पीड़ित हो सकती है।