簡體   English   中英

在特定情況下SQL特殊排序順序

[英]SQL special sort order under certain circumstances

我有以下場景:

  • 我有一張支持票的清單
  • 每個支持票證都有許多消息(具有自己的日期時間)
  • 每張票都有一個狀態(open,customerResponded,waitingForCustomer,已關閉)

整個表格應按虛構的優先級排序,這意味着:

  • opencustomerResponded具有相同的優先級,因此這些項目按最新票證消息ASC的日期時間排序(應首先處理最長的未觸摸票證,因此在列表頂部)。
  • waitingForCustomer的優先級較低。 因此, waitingForCustomer總是落后於狀態為opencustomerResponded票證,並且這些票據按日期時間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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM