我有一个具有自动递增标识的表"参考"字段和确定排序顺序的一对其他字段。我需要做的是找到下一个'基于基于初始项的引用字段的字段对进行排序时表中的项。
所以当我按SortParent.SortChild排序时,我的数据看起来像这样:
Reference SortParent SortChild Data
------------------------------------------
9 1 2 Fred
7 1 3 Jim
11 1 4 Sheila
4 2 1 Micro
5 2 2 Archimedes
12 2 3 Electron
所以在这个例子中," Jim"行(参考= 7)来自" Fred" (参考= 9)即使它的参考值较小。
所以我希望能够通过基于Jim的参考搜索找到Fred之后的哪一行
目前在代码中我进行查询以查找Fred的行的值:
SELECT SortParent,SortChild From MyTable WHERE Reference=9
返回1,2。然后搜索1,2:
之后的第一行SELECT * FROM MyTable
WHERE ((SortParent=1 and SortChild>2) OR (SortParent>2))
ORDER BY SortParent,SortChild
因此将返回具有引用7和排序值1,3
的行我非常确定这可以在一个查询中完成,但我最好的方法是难以接受。
顺便提一下,如果有人对处理两部分排序列的替代方法有任何建议,这将使这更容易,请随时提供帮助!
答案 0 :(得分:0)
我相信您正在查看LEAD或LAG窗口函数:
https://msdn.microsoft.com/en-US/library/hh213125.aspx
SELECT
NextReference
FROM
(SELECT
reference
, LEAD(reference, 1,0) OVER (ORDER BY SortParent,SortChild) AS NextReference
, *
FROM
mytable
) newTable
WHERE
reference = 9
我使用了LEAD,但如果你正在寻找行的另一个方向
,请尝试使用LAG我没有对这个特定的查询进行测试,所以我的语法不合理,但如果你有任何麻烦,请告诉我,如果我有一点麻烦,我会再说一遍回到我的办公桌前
编辑:使用您问题中的错误sql作为我的基础
EDIT2:将潜在客户放入子查询中以允许我们查询