我需要做一个涵盖了几种情况的sql命令...

我首先需要按列到期时间(纪元字符串)进行排序,该字段大于现在或为空(未到期)。

因此,过期的记录(那些过期时间少于现在的记录)将始终在未过期的记录之后。

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

表格
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

最佳答案

我想你要:

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;

10-07 13:17