[英]SQL special sort order under certain circumstances
我有以下場景:
整個表格應按虛構的優先級排序,這意味着:
open
和customerResponded
具有相同的優先級,因此這些項目按最新票證消息ASC的日期時間排序(應首先處理最長的未觸摸票證,因此在列表頂部)。 waitingForCustomer
的優先級較低。 因此, waitingForCustomer
總是落后於狀態為open
或customerResponded
票證,並且這些票據按日期時間DESC排序(因為客戶從未回復的舊票證不太相關)。 closed
工作方式與waitingForCustomer
相同,但優先級更低,因此這些工單位於列表的末尾。 所以,在我解釋了這個場景后,我有以下問題:
是否可以向ORDER BY添加條件以使這樣的事情成為可能,或者是否有其他方法來實現它?
編輯:故障單狀態是一個整數(open = 0,customerResponded = 10,waitingForCustomer = 20,closed = 100)。
您可以通過以下方式在訂單中使用案例表達:
ORDER BY status,
CASE WHEN status IN (0, 10) THEN Datetime END ASC,
CASE WHEN status IN (20, 100) THEN Datetime END DESC
感謝GarethD,我找到了一個解決方案,但與他的有點不同:
ORDER BY
CASE WHEN t.`ticket_status` IN (0, 10) THEN 0 ELSE t.`ticket_status` END ASC,
CASE WHEN t.`ticket_status` IN (0, 10) THEN m.`message_created`
ELSE -m.`message_created` END ASC
首先,我檢查我的狀態是open=0
還是customerResponded=10
。
如果是這樣,我按0排序(這意味着同樣在列表的頂部)。
否則,我按票證狀態排序( waitingForCustomer
優先級高於closed
)。
從屬訂單指令現在通過message_created ASC
或-message_created ASC
(技術上是message_created DESC
)按順序在下級“組”中按日期排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.