我的表如下所示(并且我正在使用MySQL):
m_id | v_id | timestamp ------------------------ 6 | 1 | 1333635317 34 | 1 | 1333635323 34 | 1 | 1333635336 6 | 1 | 1333635343 6 | 1 | 1333635349
我的目标是将每个m_id占用一次,并以最高的时间戳排序。
结果应为:
m_id | v_id | timestamp ------------------------ 6 | 1 | 1333635343 34 | 1 | 1333635336
我写了这个查询:
SELECT * FROM table GROUP BY m_id ORDER BY timestamp DESC
但是,结果是:
m_id | v_id | timestamp ------------------------ 34 | 1 | 1333635323 6 | 1 | 1333635317
我认为这是因为它先执行GROUP_BY,然后再对结果进行ORDER。
有任何想法吗?谢谢。
一种正确使用此方法的方式group by:
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