我有一个"票证"表。
表结构:
- 唯一ID(自动插入)
- 状态(打开/关闭/异常)
- 优先级(数字,较大数字=更高的优先级)
- creation_date
- 等...
我需要按以下顺序检索机票:
- 首先按优先级排序(最高的)
- 接下来的"关闭"门票,由Creation_date(最新第一)排序
这可以通过两个查询的结合来完成,但这会增加很多复杂性。
在单个查询中完成此操作的任何建议?
不要使用 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