我的表如下所示(并且我正在使用MySQL):
6 | 1 | 1333635317 34 | 1 | 1333635323 34 | 1 | 1333635336 6 | 1 | 1333635343 6 | 1 | 1333635349 我的目标是将每个m_id占用一次,并以最高的时间戳排序。
结果应为:
6 | 1 | 1333635343 34 | 1 | 1333635336 我写了这个查询:
SELECT * FROM table GROUP BY m_id ORDER BY timestamp DESC 但是,结果是:
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与子查询中的某行匹配的行(此操作-执行联接,但未从第二个表中选择任何列,它仅用作过滤器- 在您需要的情况下称为“半联接”很好奇) 来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。