Я озадачен тем, что LEAD всегда возвращает ID = 1, который даже не является идентификатором в таблице (идентификатор начинается с ~ 18k), вместо действительного идентификатора для следующей записи. Значения NULL находятся там, где они должны быть, это просто строки, которые должны содержать действительный идентификатор. LAG с тем же синтаксисом работает, как ожидалось, возвращая правильные значения. LEAD даже не работает (правильно), когда я комментирую LAG. Кстати, я скопировал код (и просто изменил имена таблиц и столбцов) из другого моего скрипта, где он работал нормально.
UPDATE PRJ SET
PrevJob = SRC.PrevID, -- << write Previous ID
NextJob = SRC.NextID -- << write Next ID
FROM PRJ as PRJ
LEFT JOIN (
SELECT
ID, -- << ID for joining to the original record
LAG(ID) OVER (PARTITION BY RPCode,PNInt ORDER BY OrderNo) AS PrevID, -- << previous works
LEAD(ID) OVER (PARTITION BY RPCode,PNInt ORDER BY OrderNo) AS NextID -- << next returns 1
FROM PRJ as PRJ2
) as SRC ON SRC.ID = PRJ.ID
Вот пример результатов с помощью SELECT (см. Значения 1 в последнем столбце):
ID PNInt RPCode OrderNo PrevJob NextJob
-------- ----------- -------------------- ------- -------------------- -------
18783 53 00005320171113120000 1 NULL 1
18795 53 00005320171113120000 2 18783 1
18789 53 00005320171113120000 3 18795 NULL
18784 53 00005320171127120000 1 NULL 1
18796 53 00005320171127120000 2 18784 1
18790 53 00005320171127120000 3 18796 NULL
18785 53 00005320171211120000 1 NULL 1
18797 53 00005320171211120000 2 18785 1
18791 53 00005320171211120000 3 18797 NULL
18786 53 00005320171225120000 1 NULL 1
18798 53 00005320171225120000 2 18786 1
18792 53 00005320171225120000 3 18798 NULL
18787 53 00005320180108120000 1 NULL 1
18799 53 00005320180108120000 2 18787 1
18793 53 00005320180108120000 3 18799 NULL
Боюсь, это может быть какая-то глупая опечатка, которую я слепой видеть. Или есть какие-то зацепки с LAG и LEAD?
select
безupdate
и посмотрите, что вы получите для столбцаNextID
. 3. Попробуйте изменить псевдоним таблицы в операторе обновления на другое, чем имя таблицы. 4. Если ничего не помогает, попробуйте использоватьlag
сorder by desc
вместоlead
5. Если и это не помогло - перезапустите и повторите попытку. - person Zohar Peled   schedule 20.11.2017RPCode
к результатам вашего образца. Может есть проблема. - person Rokuto   schedule 20.11.2017