SQL ORDER有条件地按列加第二列

时间:2019-10-18 15:10:17

标签: mysql sql sql-order-by case-when

我需要执行一个涉及以下几种情况的sql命令...

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

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

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

tTABLE 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

2 个答案:

答案 0 :(得分:1)

我想你想要

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;

答案 1 :(得分:0)

我不确定这在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。