我将简要解释一下我的问题
下面有重复的rino
(实际上这个rino
是前端的序列号)
chqid rino branchid
----- ---- --------
876 6 2
14 6 2
18 10 2
828 10 2
829 11 2
19 11 2
830 12 2
20 12 2
78 40 2
1092 40 2
1094 41 2
79 41 2
413 43 2
1103 43 2
82 44 2
1104 44 2
1105 45 2
83 45 2
91 46 2
1106 46 2
在我的情况下,我不想删除这些重复的rino
而不是我计划更新rino
max 日期(上面示例中未指定的列,实际上日期列是)到下一个rino
号
我的意思是:
如果我根据max(date)
得到上述结果,我会得到
chqid rino branchid
----- ---- --------
876 6 2
828 10 2
19 11 2
830 12 2
1092 40 2
79 41 2
413 43 2
82 44 2
83 45 2
1106 46 2
(注意:branchid=2
中重复行的总数 10 )
rino
表中最后输入的branchid=2
245 10 rows
(列rino
),其数字从 246到255 (仅添加245 + 10,如此{{1} })预期产出:
select lastno+ generate_series(1,10) nos from tab where cola=4 and branchid = 2 and vrid=20;
答案 0 :(得分:0)
最后我找到了一个解决方案,使用dynamic-sql来解决我的问题
do
$$
declare
arow record;
begin
for arow in
select chqid,rino,branchid from (
select chqid,rino::int ,vrid,branchid ,row_number()over (partition by rino::int ) rn
from tab
where vrid =20
and branchid = 2)t
where rn >1
loop
execute format('
update tab
set rino=(select max(rino::int)+1 from gtab19 where acyrid=4 and branchid = 2 and vrid=20)
where chqid=%s
',arow.chqid);
end loop;
end;
$$;