小编典典

一起使用ORDER BY和GROUP BY

mysql

我的表如下所示(并且我正在使用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

我认为这是因为它先执行GR​​OUP_BY,然后再对结果进行ORDER。

有任何想法吗?谢谢。


阅读 528

收藏
2020-05-17

共1个答案

小编典典

一种正确使用此方法的方式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与子查询中的某行匹配的行(此操作-执行联接,但未从第二个表中选择任何列,它仅用作过滤器- 在您需要的情况下称为“半联接”很好奇)
  • 订购行
2020-05-17