【问题标题】:MySQL - Group by with Order by DESCMySQL - 按 DESC 顺序分组
【发布时间】:2011-06-08 22:32:06
【问题描述】:

表:uuid、版本、日期时间

版本不是唯一的,但其想法是仅获取给定 uuid 具有最新日期时间的行

SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc

...当然会得到 datetime asc 结果——有没有办法将 group by “preorder”到 desc,以便只获取最新版本?

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    我有一个更好的方法,你可以添加一个desc 来分组:

    SELECT * FROM table WHERE uuid='bla' GROUP BY version desc

    为什么会这样是因为我的 id 是生成的,所以最新的 id 总是意味着最新的日期时间

    【讨论】:

    • 为什么没有人看到这个......它的工作和简单的查询:D
    • 很好,但只有在按顺序插入datetime 时才有效(已排序)
    【解决方案2】:
    SELECT * FROM 
    (SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table 
    GROUP BY version;
    

    【讨论】:

      【解决方案3】:

      由于该表只有这 3 个字段,并且您通过 uid 进行过滤,因此您可以只使用 MAX 而不使用 JOIN:

      SELECT version, MAX(datetime) Maxdatetime
      FROM table
      WHERE uuid='bla'
      GROUP BY version
      

      但是,如果表格有更多字段,或者您没有按 uid 过滤 - 您需要先获取每个版本的 MAX 日期时间,然后选择该行:

      SELECT t.uuid, t.version, t.datetime 
      FROM table t JOIN (
          SELECT version, MAX(datetime) Maxdatetime
          FROM table
          WHERE uuid='bla'
          GROUP BY version
      ) r ON t.version = r.version AND t.datetime = r.Maxdatetime
      WHERE t.uuid='bla'
      ORDER BY t.datetime desc
      

      【讨论】:

      • 正是我需要的一些细微改动 - 谢谢!
      • WHERE子句是否需要重复两次?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2021-12-13
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多