一起使用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
我认为这是因为它先执行GROUP_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