我有一个像这样的更新查询
UPDATE myTable
SET ParentID = X
我需要X作为当前正在更新的上一行的ID。
有什么想法吗?
答案 0 :(得分:4)
如果“previous”行表示id为最大值的行小于当前行中的值,则可以使用SQL Server 2012中的lag()
函数或相关子查询:
UPDATE myTable
SET ParentID = (select top 1 id
from mytable m2
where m2.id < myTable.id
order by id desc
)
答案 1 :(得分:1)
也许以下脚本会有用(假设第一个值没有以前的值,那么将为NULL),你可以尝试这个 HERE :
CREATE TABLE TEST(
ID INT);
INSERT INTO TEST VALUES(10);
INSERT INTO TEST VALUES(20);
INSERT INTO TEST VALUES(30);
INSERT INTO TEST VALUES(40);
INSERT INTO TEST VALUES(50);
INSERT INTO TEST VALUES(60);
/*HERE THE SCRIPT*/
WITH temp AS (
SELECT x.ID,
ROW_NUMBER() over (order by x.ID) AS n
FROM TEST x
)
UPDATE t
SET t.ID = (SELECT temp.ID FROM temp WHERE temp.n = t.n - 1)
FROM (
SELECT x.ID,
ROW_NUMBER() over (order by x.ID) AS n
FROM TEST x
) t
SELECT * FROM TEST
注意:也许这可以通过更简单的方式解决,但这是我发布的第一件事情