我在使用上一行的价值方面遇到了一些问题(我有点不知道怎么做)。
我想做类似的事情:
update test SET amount = (select amountAfter
from rozl (Here i want to take it from previous row = this ID - 1)
我有主键id,整个表按id排序。 我想做的是:
从列名称amountAfter中取出上一行的值,并将其插入实际ID中的金额。
这是示例
id amount used destroyed amountAfter
1 100 50 30 20
2 20 5 1 14
答案 0 :(得分:3)
假设您的join
字段是连续的,则使用id
的一个选项:
update t1
set t1.amount = t2.amountafter
from test t1 join
test t2 on t2.id = t1.id - 1
如果您使用的是2012
或更高版本,请查看使用lag
:
with cte as (
select id, amount, lag(amount) over (order by id) prevamount
from test
)
update cte
set amount = prevamount
where prevamount is not null
我想完整,如果数字不是连续的(使用两种方法的组合),2008
将与row_number
一起使用:
with cte as (
select id, amount, row_number() over (order by id) rn
from test
)
update t1
set t1.amount = t2.amount
from cte t1 join
cte t2 on t2.rn = t1.rn - 1