我有一个表,我想用上一行中另一列中的值更新列。
我想做这样的事情。
UPDATE myTable as b SET prev=(SELECT top 1 myField FROM myTable
WHERE rowID<b.rowID ORDER By rowID Desc)
有什么想法吗?
注意:我正在使用Access / SQL服务器。我收到错误'操作必须使用可更新的查询'。
注意2:How do I UPDATE from a SELECT in SQL Server?的解决方案无效。
答案 0 :(得分:0)
你可以通过LAG()分析函数的组合来计算前一行的值和UPDATE(这里,我使用MERGE语句)来实现这一点:
MERGE INTO mytable as target using (
select
t.id,
lag(field1) over (partition by null order by id) new_prev_field
from mytable t
) as src (id, new_prev_field)
on (target.id = src.id)
when matched
then update
set prev_field1 = src.new_prev_field;
答案 1 :(得分:-1)
使用Max()
而不是TopUPDATE myTable as b
SET prev = (
SELECT max(rowID)
FROM myTable
WHERE rowID < b.rowID)