数据库更新字段id递增

给linkid重新赋值,新的id按序列递增
update temp_tbl as c
set link_id=(186781+b.new_id)
from
(
    select * from
    (
        select row_number() over(order by link_id) as new_id, link_id, generate_series(1, 100) as seq
        from temp_tbl
    ) as a
    where a.new_id = a.seq
) as b
where b.link_id=c.link_id



原则:先生成一个窗口序号,窗口号等于seq的留下(保留一条,否则展开变成一对多了)

开窗函数
row_number() over
http://blog.csdn.net/631799/article/details/7419797
组合个数

分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
        开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化

1:over后的写法:     
     over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
     over(partition by deptno)按照部门分区
 
     over(partition by deptno order by salary)
 
2: 开窗的窗口范围
over(order by salary  range  between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。

  row_number() over() 分组排序 功能:
partition by 用于给结果集分组
PostgreSQL 中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据

你可能感兴趣的:(数据库)