У меня есть запрос на обновление, как такОбновление строки на основе предыдущей строки идентификатора
UPDATE myTable
SET ParentID = X
мне нужно X быть идентификатор предыдущей строки, которая в настоящее время обновляется.
Любые идеи?
У меня есть запрос на обновление, как такОбновление строки на основе предыдущей строки идентификатора
UPDATE myTable
SET ParentID = X
мне нужно X быть идентификатор предыдущей строки, которая в настоящее время обновляется.
Любые идеи?
Если по «предыдущей» строке вы имеете в виду строку, где id является самым большим значением, меньшим, чем значение в текущей строке, вы может использовать функцию lag()
в SQL Server 2012 или коррелированный subq uery:
UPDATE myTable
SET ParentID = (select top 1 id
from mytable m2
where m2.id < myTable.id
order by id desc
)
Отлично! благодаря – totalitarian
Может быть, следующий сценарий будет полезен (при условии, что первое значение не имеют предыдущее значение, то будет 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
Примечание: может быть, это может быть решена в более простой способ, но это было первое, что произошло со мной, с тем, что вы опубликовали
любые образцы записей? –