我有一张已下订单的表格。它们有时间戳。有些订单也被标记为优先订单。
非优先订单填充FIFO - 最早填写的订单首先填写,新订单填写到该行的后面。
但是,可以有优先顺序。这些都有一个简单的bool'1'标记为优先级。但问题是,它们反向填充 - 较新的优先顺序会推迟旧的优先顺序。因此,对它们的时间戳是DESC而不是升序。
我基本上需要一个像这样工作的选择:(我知道这是无效的,我试图展示我想要实现的目标)
SELECT *
FROM table
ORDER BY priority DESC,
(if priority = 1 order by timestamp DESC else order by timestamp)
我尝试过联合两个选择,但那些失去了排序。我尝试了(SELECT)UNION(SELECT)ORDER BY,但我需要两种不同的选择排序。
没有做两次单独的选择 - 这可能吗?我无法弄明白。
答案 0 :(得分:0)
可能这样的事情会起作用
SELECT *
FROM tab ORDER BY
(CASE WHEN
(priority = 1) THEN
'timestamp DESC'
ELSE
'timestamp'
END), priority DESC ;
在此处查看演示小提琴http://sqlfiddle.com/#!2/3ce7f/3
答案 1 :(得分:0)
SELECT * FROM orders
ORDER BY
CASE WHEN priority = 1 THEN 'timestamp DESC' ELSE 'timestamp ASC' END