如有一个表 sdObjects,关键字段(fid, fcolid),按(fid,fcolid)排序.
当前记录关键字段值fid= 12332, fcolid= 2,它的上一条记录fid 可能不是这个值了
如何查出此排序的上一条记录?用什么方法实现?如果关键字段不止两个呢?又如何查询?

解决方案 »

  1.   

    adoquery1.Prior;就是得到上一条记录.
              
              next          frist;
              last
      

  2.   

    不是从一个前台数据集里取,而是直接从数据库里取排序邻近的一条记录返回,
    而是可能不止2个字段的关键字,用SQL语句 如何实现?
      

  3.   

    那可以把你当前这条记录的关键字段值作为检索条件,然后选择最大的一条记录max,并且还是按照你原来的排序,这样应该就是得到你所谓的上一条记录了,不知道这样可否符合你的要求
      

  4.   

    有表如下:按(fid desc,fcolid desc)排序
            fid, fcolid
    --------------------------------
    记录0:  3, 1
    记录1:  2, 2
    记录2:  2, 1
    记录2:  1, 2
    记录4:  1, 1
    --------------------------------
    现在已知记录是(fid,fcolid) 为 (2,1)
    要查出上一条应为 (2,2),下一条应为(1,2)
    //-----------------
    这种做法不知是否很好?
    可以将关键字的排序字段都转换成字符型迭加组成一个字符串来进行比较。
    能够进行排序的应该都有转换成字符串吧?这样('1'+'2')<('2'+'1')了,就可以了:declare
      @fid varchar(20), @fcolid int
    set  @fid= '2'
    set @fcolid= 1
     
     select top 1 * from sdObjects 
    where fmodule<= @fid  
    --order by fmodule desc,fid desc
    and
    (
    (convert(varchar(20),fid)+convert(varchar(20),fcolid))

    (convert(varchar(20),@fid)+convert(varchar(20),@fcolid))
    )
    order by fmodule desc ,fid desc 
    -------- 
      

  5.   

    to 回复人: qybao(阿宝) ( ) 信誉:100 
    如何得到这个记录的max?
    //---------------------------------------
    服务器: 消息 174,级别 15,状态 1,行 1
    max 函数要求有 1 个参数。