Using ORDER BY and GROUP BY together Using ORDER BY and GROUP BY together mysql mysql

Using ORDER BY and GROUP BY together


One way to do this that correctly uses group by:

select l.* from table linner 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_idorder by timestamp desc

How this works:

  • selects the latest timestamp for each distinct m_id in the subquery
  • only selects rows from table that match a row from the subquery (this operation -- where a join is performed, but no columns are selected from the second table, it's just used as a filter -- is known as a "semijoin" in case you were curious)
  • orders the rows


If you really don't care about which timestamp you'll get and your v_id is always the same for a given m_i you can do the following:

select m_id, v_id, max(timestamp) from tablegroup by m_id, v_idorder by timestamp desc

Now, if the v_id changes for a given m_id then you should do the following

select t1.* from table t1left join table t2 on t1.m_id = t2.m_id and t1.timestamp < t2.timestampwhere t2.timestamp is nullorder by t1.timestamp desc


Here is the simplest solution

select m_id,v_id,max(timestamp) from table group by m_id;

Group by m_id but get max of timestamp for each m_id.