如何将列中的重复行更新为新值

时间:2015-02-05 11:20:35

标签: sql postgresql sql-update

我将简要解释一下我的问题

下面有重复的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;

使用

1 个答案:

答案 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;
$$;