SQL 按列加辅助列有条件地排序

SQL ORDER conditionally by column plus secondary column

我需要做一个 sql 订单,其中涵盖了一些案例...

我首先需要按过期列(纪元字符串)排序,它大于现在或为空(未过期)。

因此过期记录(那些过期时间小于现在的记录)将总是在未过期记录之后。

然后在每种情况下,都需要按字母顺序进行二次搜索。

t表 ID 姓名 到期 活跃

我目前的尝试:

select * from `tTABLE` WHERE `active`='1' 
ORDER BY 
CASE WHEN `expiry` > 1571410101 THEN 1
CASE WHEN `expiry` = '' THEN 2 ELSE 3 END,`expiry`
DESC

我不确定这在 MySql 中如何工作,但在 Oracle 中以下 SQL 工作:

SELECT *,
      CASE WHEN expiry > 1571410101 THEN 1
           WHEN expiry = '' THEN 2 
           ELSE 3 
      END exp
FROM tTABLE 
WHERE active = '1' 
ORDER BY exp DESC

我认为同样适用于 MySql。

我想你想要:

SELECT t.*
FROM `tTABLE` t
WHERE  active = 1  
ORDER BY (CASE WHEN expiry > unixtime() 
               THEN 1   -- explicit future expires first
               WHEN expiry IS NULL
               THEN 2   -- no expires second
               ELSE 3
          END),
         name;