首页 > 解决方案 > 更新“将行值向下移动一列”的查询(postgresql)

问题描述

我有 10000 行这样的表

 id         name         gradeId
------------------------------------------              
1327        test0        1
1330        test1        1
1331        test2        1

我想更新名称列(名称列的值向下移动)我想要这样的结果

 id         name         gradeId
------------------------------------------              
1327        test1        1
1330        test2        1
1331        test3        1

标签: sqlpostgresql

解决方案


您可以使用lead()

update t
    set name = tt.next_name
    from (select t.*, lead(name) over (order by id) as next_name
          from t
         ) tt
    where tt.id = t.id;

当然,最后一个name将设置为NULL.

要为最后一行输入一个固定值,只需使用默认值lead()

update t
    set name = tt.next_name
    from (select t.*,
                 lead(name, 1, <default value>) over (order by id) as next_name
          from t
         ) tt
    where tt.id = t.id;

推荐阅读