一起使用ORDER BY和GROUP BY

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

有任何想法吗?谢谢。

回答:

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

以上是 一起使用ORDER BY和GROUP BY 的全部内容, 来源链接: utcz.com/qa/404149.html

回到顶部