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 *