日期:2014-05-18  浏览次数:20540 次

求查询按排序结果得到的上一条或下一条记录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

下一条解决了,上一条怎么找,不用我说了吧。