2017-02-27 29 views
1

將搜索結果按2列排序時出現問題。MySQL ORDER BY 2列有例外

我的表:運輸​​時間存儲在幾秒鐘內,任命是時間

id transit_time appointment 
---------------------------- 
2 3845   09:00:00 
11 22053  13:00:00 
10 4852   08:00:00 
11 5985   NULL 
13 7221   12:45:00 
14 3812   NULL 
17 4256   NULL 
18 5663   NULL 
19 4725   NULL 

我希望做一個選擇,通過訂購記錄:

任命是在結束NULL

2.預約時間ASC

3.如果運輸時間比預約大於這個紀錄應該是在2點

排序的頂部例如,正確的順序應該是:

id transit_time appointment 
---------------------------- 
11 22053  13:00:00 
13 10221  12:45:00 
10 3852   08:00:00 
2 4245   09:00:00 
11 5985   NULL 
18 5663   NULL 
19 4725   NULL 
17 4256   NULL 
14 3812   NULL 

我已經試過許多種類與CASE但沒有運氣來獲得該訂單。任何幫助將不勝感激。

SELECT * FROM table WHERE ... 
ORDER BY (CASE WHEN appointment IS NULL THEN 1 ELSE 0 END) asc, 
transit_time desc 
+0

您想要的結果不相匹配的樣本數據。你有一個10221或3852在transit_time我不明白它來自哪裏。在sqlfiddle數據所有約會轉換爲second - transit_time給值大於transit_time – Mihai

回答

0

轉換爲秒,使比較

ORDER BY CASE WHEN time_appointment IS NULL THEN 1 ELSE 0 END , 
transit_time DESC, 
CASE WHEN transit_time > TIME_TO_SEC(time_appointment) THEN transit_time ELSE NULL END 
+0

您的答案是有道理的,但我的排序仍然是錯誤的。把運輸時間放在首位,但約會從最大時間到最小。 –

+0

@AdrianP。把示例數據放在sql提琴上,這樣我就可以測試它。 – Mihai

+0

http://sqlfiddle.com/#!9/662af/3謝謝 –