SQL ORDER условно по столбцу плюс вторичный столбец - PullRequest
0 голосов
/ 18 октября 2019

Мне нужно сделать заказ 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 ]

1 голос
/ 18 октября 2019

Я думаю, что вы хотите:

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;
0 голосов
/ 18 октября 2019

Я не уверен, как это будет работать в 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.

...