ऐसा करने का एक तरीका जो group by
. का सही उपयोग करता है :
select l.*
from table l
inner join (
select
m_id, max(timestamp) as latest
from table
group by m_id
) r
on l.timestamp = r.latest and l.m_id = r.m_id
order by timestamp desc
यह कैसे काम करता है:
- प्रत्येक विशिष्ट
m_id
के लिए नवीनतम टाइमस्टैम्प का चयन करता है सबक्वेरी में - केवल
table
से पंक्तियों का चयन करता है जो सबक्वेरी से एक पंक्ति से मेल खाता है (यह ऑपरेशन - जहां एक जॉइन किया जाता है, लेकिन दूसरी टेबल से कोई कॉलम नहीं चुना जाता है, इसे सिर्फ एक फिल्टर के रूप में उपयोग किया जाता है - इसे "semijoin" अगर आप उत्सुक थे) - पंक्तियों का आदेश देता है