sql - 更新“将行值向下移动一列”的查询(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
解决方案
您可以使用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;
推荐阅读
- mysql - sql:选择 * 和最小值,没有过滤行
- c++ - C++ 简化类/OOP 方法
- kubernetes - 并行 pod 的 subPathExpr
- javascript - 单击色板时如何更改特色图像?
- elasticsearch - 在 idex 中查找短语
- vue.js - 如何在 v-textarea 中隐藏滚动条?
- python - RNN 带或不带循环:每个输出的含义?
- python - Cisco WebEx:使用 Python 2.7 为一组新令牌生成新代码时出现问题
- php - 如何在 laravel 版本 5.0.35 中配置任何 restful api 包,如 laravel/passort 或 dingo/api(*没有作曲家)
- html - 是否有任何 CSS 代码来定位图像,如下所示但也响应屏幕尺寸?