我有一个这样的更新查询
UPDATE myTable
SET ParentID = X
我需要 X 是当前正在更新的上一行的 ID。
有任何想法吗?
如果“上一个”行是指 id 的最大值小于当前行中的值的行,则可以使用lag()
SQL Server 2012 中的函数或相关子查询:
UPDATE myTable
SET ParentID = (select top 1 id
from mytable m2
where m2.id < myTable.id
order by id desc
)
也许下面的脚本会很有用(假设第一个值没有以前的值,那么它将是 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
注意:也许这可以用一种更简单的方式解决,但这是你发布的内容让我想到的第一件事