2010-08-12 60 views
0

有兩種方法可以在考慮兩個字段時獲取具有MAX()的行,並給出其中一個優先級。例如分層MAX

ID  Column_A  Column_B 
---------------------------- 
1  1    3 
2  3    2 
3  2    2 
4  3    1 

會在Column_B返回

ID  Column_A  Column_B 
---------------------------- 
2  3    2 

因爲這兩個ID的2和4是MAX上Column_A,但#2 「勝」。

我想這個查詢怎麼做,在僞代碼:

If (It's the MAX on A, tied with nothing) 
    Return it 
Else If (It's tied for MAX on A and it's MAX [or tied] on B) 
    Return it 

回答

1

你可以試試...

SELECT * 
    FROM mytable 
    ORDER BY Column_A DESC, Column_B DESC 
    LIMIT 1; 

(如果我理解正確的問題)。

編輯爲Matthew Purdon友善地建議。

+0

有沒有我可以放在WHERE或HAVING子句中的條件?因爲我在另一個需要多行的查詢中使用它。 – babonk 2010-08-12 08:04:23

+0

您可以在'FROM'之後和'ORDER BY'之前放置'WHERE'子句。如果你在另一個查詢中使用這個,你可能希望刪除'LIMIT'子句。沒有'GROUP BY'子句的情況下,你不能使用'HAVING',並且在問題的描述中沒有看到其中的任何一個。 – 2010-08-12 08:40:11

+1

由於這是他想要的MAX,它應該是: ORDER BY Column_A DESC,Column_B DESC – 2010-08-12 13:58:43