gpt4 book ai didi

postgresql - plpgsql 循环查询和更新

转载 作者:行者123 更新时间:2023-11-29 14:32:21 28 4
gpt4 key购买 nike

我有一个名为 test 的表,我按名为 daterange 的范围的上限对它进行排序。我想获取此排序数据的顺序并将其保存在名为 bc_order 的同一表的另一列中。

排序的顺序必须保存在bc_order列中。

所以我对我想要的数据进行排序,循环遍历结果,每次都增加一个计数器,然后用当前计数器更新 bc_order 列。

CREATE OR REPLACE FUNCTION __a_bc_order() RETURNS void  AS $$
DECLARE
iterator integer := 1;
r test%rowtype;
BEGIN
for r in
select * from test where upper(test.daterange)<0 order by upper(test.daterange) DESC
loop
update test SET bc_order = iterator where test.id = test.id ;
iterator := iterator + 1;
end loop ;
END
$$ LANGUAGE plpgsql;

select __a_bc_order();

我希望能得到类似的东西

id        daterange     bc_order
14 [-3001011,-2000101) 1
21 [-3001202,-3000102) 2
19 [-3010102,-3000102) 3
22 [-4001202,-4000102) 4
23 [-4000702,-4000302) 5
27 [-6000401,-6000201) 6
26 [-6000501,-6000301) 7

但是我明白了

id        daterange     bc_order
14 [-3001011,-2000101) 7
21 [-3001202,-3000102) 7
19 [-3010102,-3000102) 7
22 [-4001202,-4000102) 7
23 [-4000702,-4000302) 7
27 [-6000401,-6000201) 7
26 [-6000501,-6000301) 7

我想循环有一个我无法修复的问题。请指教。我使用 PostgreSQL 10

最佳答案

无需使用循环或 PL/pgSQL:

update test
set bc_order = t.rn
from (
select id, row_number() over (order by upper(daterange) desc) as rn
from test
upper(daterange) < 0
) t
where t.id = test.id;

关于postgresql - plpgsql 循环查询和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com