使用上一行的值

时间:2016-08-06 00:07:59

标签: sql sql-server

我在使用上一行的价值方面遇到了一些问题(我有点不知道怎么做)。

我想做类似的事情:

 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

1 个答案:

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