假设我有一张桌子看起来像:
Users
---------------------
ID | LastName | FirstName
1 | Hane | Aaron
2 | Messi | Dennis
3 | Abraham | Dont
4 | Abraham | Carrey
如果按lastname,firstname排序,那么我对行号的期望顺序是ids:4,3,1,2。
我的问题是我选择一行,并将其返回到应用程序。然后,我希望能够根据用户id进行排序,以根据相同的顺序获取下一行。
因此,如果我执行第一次选择,并返回id 4,我希望能够查询sql以按顺序获取下一个用户(3)。
我尝试的sql语句是
select TOP(1) RowNum, FirstName, LastName, ID
from (
select *, ROW_NUMBER() over (order by [LastName], [FirstName]) as RowNum
from [Users]
) t
where t.RowNum > (
select ROW_NUMBER() over (order by [LastName], [FirstName]) as RowNum
from [Users]
where ID = 4
)
但这不仅不起作用(最后一个sql语句将始终返回1,因为我显然正在向下筛选整个查询……)它似乎多次执行相同的逻辑,如果我正确理解order by,将解析整个表,这将非常缓慢,因为数据集变得非常大。
有没有一种方法可以有效地实现我想要做的事情?,我只想向前滚动,如果可能的话,在末尾换行(所以id 4,3,1,2,4,3,1,2等)。
谢谢