id  A
1   1
2   4
3   2
4   2  
5   3
以上数据以A字段排序,即 order by A,这时数据
id  A
1   1
3   2
4   2  
5   3
2   4
当前位置是id=4问:如何获取排序后的上一行?

解决方案 »

  1.   

    select top 1 * from 表 where id<4
      

  2.   

    程序中可以使用游标,但是SQL中不建议用游标。SQL强调数据集的概念,即时刻以SET观念来考虑SQL实现。
      

  3.   


    select top 1 * from table where A<=(select A from table where id=4) and id<4 order by A desc
    select top 1 * from table where A>=(select A from table where id=4) and id>4 order by A
      

  4.   

    注意:是排序后的。。用id<4时 id=2时就包括在内了。。
      

  5.   

    上面引用错:注意:是排序后的。。用id<4时 id=2时就包括在内了。。
      

  6.   

    要用row_number
    Select * From (Select *,ROW_NUMBER() OVER(ORDER BY a) as RowNum From tb) testtb Where  RowNum = 4
      

  7.   

    declare @tb table([id] int,[A] int)
    insert into @tb
    select 1,1 union all
    select 2,4 union all
    select 3,2 union all
    select 4,2 union all
    select 5,3
    select * from @tb order by [A]select top 1 * from @tb
     where [A]=(select  [A] from @tb where [id]=4)
    and [id]<>4
    order by [A] desc
      

  8.   

    我用的是access,以后会换sql server的,但现在这个问题先解决,还有别的方法吗
      

  9.   


    办法是有,但不效率,将所有数据加载到DataTable,然后再去判断数据
      

  10.   

    CREATE TABLE #tmp(aid INT PRIMARY KEY IDENTITY(1,1),ID INT,A INT)
    INSERT #tmp(ID,A) SELECT ID,A FROM test ORDER BY A
    SELECT * FROM #tmp
    --上一条记录(2 3 2)
    SELECT top 1 * FROM #tmp WHERE aid < (SELECT aid FROM #tmp WHERE ID=4) ORDER BY aid DESC
    --下一条记录(4 5 3)
    SELECT top 1 * FROM #tmp WHERE aid > (SELECT aid FROM #tmp WHERE ID=4) ORDER BY aid
    DROP TABLE #tmp
    不使用游标,使用一个自增的排序aid来排序!