开发者社区> 问答> 正文

一起使用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。

有任何想法吗?谢谢。

展开
收起
保持可爱mmm 2020-05-17 21:17:34 1464 0
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与子查询中的某行匹配的行(此操作-执行联接,但未从第二个表中选择任何列,它仅用作过滤器- 在您需要的情况下称为“半联接”很好奇) 来源:stack overflow

    2020-05-17 21:20:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像