2011-01-14 52 views
5

表:UUID,版本,日期时间MySQL的 - 组与排序DESC

版本是不是唯一的,但这个想法是对给定的UUID

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

只获取了最新的日期时间的行

...当然会得到datetime asc结果 - 有没有办法通过desc来“预先”排序,这样只有最新版本被提取?

回答

21

,因为该表只有这3个领域,你是流体过滤你可以使用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 
+0

正是我需要一些轻微的改动 - 谢谢! – mmrtnt 2013-06-14 15:59:50

+0

是否有必要将WHERE子句重复两次? – ina 2015-04-06 03:26:51

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

有对我来说是更好的方法,你可以添加一个desc由基团:UUID = 'BLA' GROUP BY版本说明

为什么它的工作原理是,因为我的ID是生成的,因此永远是最新的ID表示最新的日期时间FROM表

SELECT *