2009-12-01 99 views
5

這似乎是一個典型的問題,但它不同。MySQL按多列合併排序(不按字段1 asc,field2 asc排序)

我有一個ID和3個時間戳字段(簡單地)表。最初所有3個字段都爲空,並且它們被填充值。行的例子有:

id time1  time2  time3 
1 1259625661 1259643563 null 
2 null  1259621231 null 
3 1259625889 null  1259644511 
4 null  1259621231 null 
5 null  null  1259644511 
6 null  1259621231 null 
7 1259625889 null  null 

我需要的是得到的ID通過最近的時間戳排序(忽略,如果它在時間1,時間2或時間3)的列表。 通過時間1遞減,時間2遞減,時間3遞減做一個爲了給我一個錯誤列表,它首先排序的所有時間1場,那麼第二個,等...

預期的結果是ID的列表。

這可以在MySQL中完成單個查詢嗎?謝謝

回答

12
SELECT * 
FROM mytable 
ORDER BY 
     GREATEST(
     COALESCE(time1, 0), 
     COALESCE(time2, 0), 
     COALESCE(time3, 0) 
     ) DESC 
+1

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest上的版本說明可能對用戶詢問很有用。 – jensgram 2009-12-01 15:19:55

+0

'@ jensgram':不錯的一點。我加了'COALESCE'來處理所有情況。 – Quassnoi 2009-12-01 15:20:47