2011-09-05 112 views
9

在我的SQL查詢中,我選擇的數據與GROUP BYORDER BY條款。該表在多行中具有相同的numbers,每行中具有不同的時間。所以我想我想申請GROUP BY條款。MySQL - 使用GROUP BY和DESC

然而,在結果返回與數字最古老的時間,但我需要最近的時間。

SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC 

查詢看起來好像應該先申請GROUP BY然後ORDER BY ......但結果似乎並沒有以這種方式工作。

有什麼辦法解決這個問題嗎?

+3

[在文檔](http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html)中,如果您選擇未分組的列在每個組具有多個值的情況下顯式調出爲「不確定」。你不能依賴任何特定的行爲。你需要整行還是'數字,最大值(時間)' –

+0

你能提供一些數據與你期望的結果嗎? –

+0

謝謝你們,你讓我朝着正確的方向前進。 – user1946705

回答

14

解決辦法是重新編寫查詢作爲:

SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers; 
+3

P.S.這會導致性能下降 – jbrond

+4

理論上,你不能保證你總能得到相同的結果。 – Karolis

+1

@Karolis同意,你的答案似乎是更正確的 – feeela

13
SELECT * 
FROM table t 
WHERE time = (
    SELECT max(time) 
    FROM table 
    WHERE t.numbers = numbers 
) 
-4
SELECT * FROM TABLE GROUP BY numbers DESC; 

這會給你從組最後一個記錄。

由於

+0

這不能回答這個問題。他們想在分組之前訂購。 –