根据以前的行ID更新行

时间:2013-07-13 17:45:41

标签: sql-server

我有一个像这样的更新查询

UPDATE myTable
SET ParentID = X

我需要X作为当前正在更新的上一行的ID。

有什么想法吗?

2 个答案:

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

注意:也许这可以通过更简单的方式解决,但这是我发布的第一件事情