У меня есть таблица "билетов".
Структура таблицы:
- уникальный идентификатор (автоинкремент)
- статус (открытый/закрытый/исключение)
- приоритет (числовое, большее число = более высокий приоритет)
- Дата создания
- так далее...
Мне нужно получить билеты в следующем порядке:
- сначала открывать "открытые" билеты, отсортированные по приоритету (сначала самые высокие), а затем по созданию_создания (самый старый)
- "закрытые" билеты далее, отсортированные по созданию_date (сначала новые)
Это можно сделать с помощью UNION из двух запросов, но это добавит сложности.
Любые предложения для выполнения этого в одном запросе?
Не используйте 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