MySQL: как отсортировать некоторые записи в ASC, а некоторые в порядке DESC, основываясь на значении другого поля

0

У меня есть таблица "билетов".
Структура таблицы:

  • уникальный идентификатор (автоинкремент)
  • статус (открытый/закрытый/исключение)
  • приоритет (числовое, большее число = более высокий приоритет)
  • Дата создания
  • так далее...

Мне нужно получить билеты в следующем порядке:

  • сначала открывать "открытые" билеты, отсортированные по приоритету (сначала самые высокие), а затем по созданию_создания (самый старый)
  • "закрытые" билеты далее, отсортированные по созданию_date (сначала новые)

Это можно сделать с помощью UNION из двух запросов, но это добавит сложности.

Любые предложения для выполнения этого в одном запросе?

Теги:
sorting
sql-order-by

1 ответ

4
Лучший ответ

Не используйте union all. Используйте несколько клавиш в следующем order by:

select t.*
from t
where status in ('open', 'closed')
order by (status = 'open') desc,
         (case when status = 'open' then priority end) desc,
         (case when status = 'open' then creation_date end) asc,
         (case when status = 'closed' then creation_date end) desc
  • 0
    ИДЕАЛЬНЫЙ. Я не понимал, что заявления CASE могут быть использованы таким образом. Спасибо за просветление.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню