繁体   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