我对始终返回 ID= 1的 LEAD 感到困惑,它甚至不是表中的 ID(ID 从 ~18k 开始),而不是下一条记录的有效 ID。NULL 值是它们应该在的位置,它只是应该包含有效 ID 的行。具有相同语法的 LAG 按预期工作,返回正确的值。当我注释掉 LAG 时,LEAD 甚至不起作用(正确)。顺便说一句,我从我的其他脚本中复制了代码(并且只是更改了表和列名),它工作正常。
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 有什么问题吗?