результаты заказа по дате как c, если значение столбца равно 1, иначе - PullRequest
1 голос
/ 14 февраля 2020

У меня есть следующие результаты в MySQL; это всего два столбца: date и x. date - это отметка времени, а x - это либо 0, либо 1.

date       |  x
:--------- | -:
2020-02-13 |  1
2020-02-13 |  0
2020-02-01 |  1
2020-02-11 |  0
2020-02-11 |  1
2020-02-11 |  0
2020-02-12 |  1
2020-02-13 |  0

. Я хочу, чтобы эти результаты были отсортированы следующим образом ... Если столбец x равен 1, поместите эти Результаты в верхней части таблицы и сортировать по дате от самой старой до новой. если столбец x равен 0, поместите эти результаты в конец таблицы и отсортируйте по дате от самого нового до самого старого.

Я подхожу к следующему коду:

ORDER BY CASE WHEN x = '1' THEN 0 ELSE date END ASC

Поскольку столбец x отсортирован правильно, но дата не соответствует указанной выше.

Также, работа с mysql.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Рассмотрим:

order by
    x desc,
    case when x = 1 then date end,
    date desc

Демонстрация на DB Fiddle :

date       |  x
:--------- | -:
2020-02-01 |  1
2020-02-11 |  1
2020-02-12 |  1
2020-02-13 |  1
2020-02-13 |  0
2020-02-13 |  0
2020-02-11 |  0
2020-02-11 |  0
1 голос
/ 14 февраля 2020

Попробуйте сначала отсортировать по X, а затем по дате x = 1 возрастанию и X = 0 по убыванию

SELECT 
`date`, `x`
FROM table1
order by
    x DESC,case when x = 1 then date end,
    date desc

http://sqlfiddle.com/#! 9 / d32c7d / 4/0

...