求查询按排序结果得到的上一条或下一条记录SQL
已知 数据库某记录 ID 怎么根据该记录查询下一条,前提是有order by
比如:
tablename:test
id pos name
1 5 a
2 2 c
3 4 b
4 3 d
假如
当前记录 id=3
排序为pos asc
sql:select * from test where 1=1 order by pos
那么按这样查询的下一条应该是
1 5 a
如果id=3按name排序
sql:select * from test where 1=1 order by name
那么下一条则应该是
2 2 c
请问如何根据以上条件查询上一条或者下一条
注:请不要把id当自增长字段,也不要忽视重复或 null 记录的存在
[解决办法]
declare @test table (id int, pos int, name char(1))
insert @test
select 1, 5, 'a '
union all select 2, 2, 'c '
union all select 3, 4, 'b '
union all select 4, 3, 'd '
select top 1 a.* from @test a, @test b where b.id = 3 and a.pos > = b.pos and a.id <> b.id order by a.pos
-- 1 5 a
select top 1 a.* from @test a, @test b where b.id = 3 and a.name > = b.name and a.id <> b.id order by a.name
-- 2 2 c
下一条解决了,上一条怎么找,不用我说了吧。