SQL条件排序依据?

Posted

技术标签:

【中文标题】SQL条件排序依据?【英文标题】:SQL conditional order by? 【发布时间】: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。我想我可能遗漏了什么。 【参考方案1】:

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

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

【讨论】:

以上是关于SQL条件排序依据?的主要内容,如果未能解决你的问题,请参考以下文章

sql 分组依据和排序依据

带有排序依据的 SQL 分组依据

codeigniter 上 foreach 中的条件(排序依据)

具有排序依据的 SQL 组

自定义 SQL 排序依据

带有 LIMIT 和 OFFSET 的 SQL 排序依据。一次对每个匹配的行进行排序