在 Postgresql 中按范围对排名和重叠的行进行分组*仅保留顶行*

问题描述 投票:0回答:1

我有一个数据集,其中列出了使用连续系列的出价,例如路边临街,可以用起点和终点里程(十进制值)来识别。 开发商已竞标使用一定数量的临街道路。我想通过以下方式筛选这些:a)根据最高出价对它们进行排名,然后 b) 将它们汇总起来,以便丢弃与排名较高的投标重叠的任何投标。 我从开始和结束里程创建了一个

NUMRANGE

with rg as 
(select numrange(start_ch_km, end_ch_km,'[]'), * from recieved_bids tr order by bid_price desc)
select * from rg rg1 join rg rg2 on rg1.numrange && rg2.numrange

这给了我最高的出价与较低的出价重叠。 但是,我无法找到一种方法来忽略与较高排名的出价重叠的出价,从而为较低排名的出价留下空闲空间。在下图中,我只想返回排名 1、4 和 7。

这可以用 
GROUP
PARTITION
来完成吗?或者我必须使用
GROUP BY
函数。

overlpapaing rnages with preferred ones to return highlighted in red 使用递归 cte 可能最容易实现这一点。在下面的代码中,我使用第一个 cte 按价格降序对出价进行排名,然后查询的递归部分依次循环遍历每个出价,如果与之前接受的任何出价没有重叠,则接受它们出价存储为多范围,并随每个接受的出价更新。

postgresql range
1个回答
0
投票

© www.soinside.com 2019 - 2024. All rights reserved.