【发布时间】:2016-07-05 10:41:29
【问题描述】:
我无法让 Lead/Lag 函数正确地递增/递减并返回正确的值。无论我做什么,它仍然返回当前行。 当 p.field3 value = '223344' 时,我需要显示上一个 p.field2 值和后续 p.field2 值。
BEGIN TRY
SELECT p.field1,
p.field2,
LEAD( p.field2, 1, 'No Lead') OVER (ORDER BY p.field1) AS 'Lead',
LAG( p.field2, 1, 'No Lag' ) OVER (ORDER BY p.field1) AS 'Lag',
p.field3,
p.field4
FROM fieldTable p
WHERE p.field3 = '223344'
ORDER BY p.field1
END TRY
BEGIN CATCH
.....
END CATCH
Example Data in Database
1, 'Mr. Smith', '112233', 'Info1'
2, 'Mr. Jones', '223344', 'Info2'
3, 'Mr. Davis', '334455', 'Info3'
Data Being Returned for both Lag and Lead
2, 'Mr. Jones', 'Mr. Jones', 'Mr. Jones', '223344', 'Info2'
I need 'Mr. Smith' to be returned for Lag and 'Mr. Davis' returned for Lead
【问题讨论】:
-
发布一些数据。我从来没有遇到过麻烦。
-
1 '旋转' '23456' 1 2 '旋转' '12345' 1
-
由于某种原因,当我在第二行后按 Enter 时,它发布了我的回复。为 Lead 返回第一个值“23456”,而它应该是“12345”。 Lag 也是如此。它还返回当前记录/行。我以多种方式重写了代码,使用了 ORDER BY 和 PARTITION 的所有可能组合。我可以从多个站点剪切和粘贴示例并且它们可以工作,但是数据是简单的数字示例,没有“=”到 WHERE 子句。我认为“等于”会阻止显示下一条或上一条记录。
-
@polczym:更新您问题中的示例数据。不在此发表评论。
-
为问题添加详细信息。
标签: tsql sql-server-2012 lag window-functions lead