模式
create table items(id integer, number integer);
insert into items values
(1, 1),
(2, 1),
(3, 2),
(4, 2),
(5, 3);
查询
select id, string_agg(id::text, ',') over (order by number)
from items;
以上查询产生以下内容:
id | string_agg
---+-----------
1 | 1,2
2 | 1,2
3 | 1,2,3,4
4 | 1,2,3,4
5 | 1,2,3,4,5
但是我不希望窗口框架包含当前行的任何对等行,即:
id | string_agg
---+-----------
1 |
2 |
3 | 1,2
4 | 1,2
5 | 1,2,3,4
我需要类似的东西:
range between unbounded preceding and (first peer row - 1)
这甚至可能吗?
答案 0 :(得分:0)
我可以想出不同的方法来解决这个问题:
这是第三种选择。它生成列表,然后删除当前“组”的值:
select id,
trim(replace(string_agg(id::text, ',') over (order by number),
string_agg(id::text, ',') over (partition by number),
''
), ','
)
from items i;
这做出以下两个假设:
Here是rextester。