MySQL - 按DESC的顺序分组

时间:2011-01-14 03:54:30

标签: mysql group-by

表:uuid,version,datetime

版本不是唯一的,但我们的想法是只获取给定uuid的最新日期时间的行

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

...当然获取datetime asc结果 - 有没有办法将该组“预先排序”到desc,以便只提取最新版本?

3 个答案:

答案 0 :(得分:21)

因为该表只有那3个字段,并且您正在通过uid进行过滤,所以您可以在没有JOIN的情况下使用MAX:

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

对我来说有更好的方法,你可以通过以下方式添加desc分组:

  

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

为什么它有效是因为我的id已生成,因此最新的id意味着最新的日期时间