【问题标题】:SQL conditional order by?SQL条件排序依据?
【发布时间】:2020-01-21 21:09:01
【问题描述】:

我需要能够对票证的查询进行排序,首先是根据它们是否打开,其次是按创建的降序排列。如果我的票是开放的,它的完成日期是“0000-00-00 00:00:00”。如果它已关闭,则它具有正确的完成日期。所以表格有这些字段(很重要):

  • 工单:{id (int), created (datetime), completed (datetime) }

我希望任何完成日期为“0000-00-00 00:00:00”的工单按创建时的相反顺序位于顶部,然后所有已关闭的工单都以相反的顺序排列在下面那个。

我的第一次尝试是:

select id, message
from tickets
where {{search conditions}}
ORDER BY tickets.created, tickets.id DESC; 

但不幸的是,因为tickets.created 字段是日期时间,所以我在顶部得到了打开的票,但第一个关闭的票是搜索返回的最旧的票。有什么方法可以让我有条件地按语句排序,给我所有打开的票,然后以id desc 排序顺序给我剩下的票?

【问题讨论】:

  • 我有点困惑。如果条件仅在completed 列上,那么您为什么在order by 中使用created。我想我可能遗漏了什么。

标签: mysql sql


【解决方案1】:

您可以在order by 中使用两个键:

order by (t.completed = '0000-00-00 00:00:00') desc,  -- put these first
         t.completed desc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多