所以,我有以下UC要解决,但我仍然没有弄清楚。我今天拥有它的方式是一团糟:从数据库中获取结果并按照程序进行命令。
长话短说,我正在寻找的是按流程优先级排序,但对于每对高优先级,我需要显示一个低优先级流程:
给出一个简单的表Process
CREATE TABLE PROCESS (
PROCESS_ID INTEGER,
DESCRIPTION VARCHAR,
PRIORITY INTEGER
);
以上是我迄今为止尝试过的事情:
SELECT
PROCESS_ID,
DESCRIPTION,
PRIORITY
FROM
PROCESS
ORDER BY ROW_NUMBER() OVER (PARTITION BY PRIORITY order by p.ID_PROCESSO)
和
SELECT * FROM (
SELECT
PROCESS_ID,
DESCRIPTION,
PRIORITY,
ROW_NUMBER() OVER (PARTITION BY PRIORITY order by p.ID_PROCESSO) as RN
FROM
PROCESS)
-- I don't know what to put here to order..
有什么想法吗?
提前致谢
这里是SQLFiddle
答案 0 :(得分:1)
聚会晚了一点,但这是我的两分钱
create table rules (
priority integer,
quantity integer
);
insert into rules values (0, 2), (1, 1);
将您的规则(或您称呼的任何东西)存储在第二张表中。
with t as (
select
row_number() over(partition by p.priority order by p.id) - 1 zero_based_sequence_no,
p.*
from process p
)
select
t.id,
t.description,
case t.priority when 0 then 'HIGH' else 'LOW' end
from t
join rules r
on r.priority = t.priority
order by t.zero_based_sequence_no / r.quantity, t.priority;
此后,扩展查询,以便现在具有 n 个带有序列号的组。对于此实例,您有2个不同的序列,高优先级记录为0-3,低优先级记录为0-1。之后,只需加入规则并根据从零开始的序列号除以要订购的相同优先级的项目数量所得到的商来对它们进行排序。将优先级包含在ORDER BY子句中,您将获得所需的内容(由于优先级标识符的分配方式,因此效果很好)。