SQL2005
表TB1存在一下几种情况:
1、
ID     AID    BID    CID     CHECKTIME
001    001    NULL   NULL    12:12:00
001    002    NULL   NULL    09:12:00
001    003    NULL   NULL    07:12:00查询结果:
ID     AID    BID    CID     CHECKTIME
001    001    002    003     12:12:00
2、
ID     AID    BID    CID     CHECKTIME
001    001    002    003     12:12:00
001    002    NULL   NULL    09:12:00
001    003    NULL   NULL    07:12:00查询结果:
ID     AID    BID    CID     CHECKTIME
001    001    002    003     12:12:00
3、
ID     AID    BID    CID     CHECKTIME
001    001    002    NULL    12:12:00
001    003    NULL   NULL    09:12:00
001    003    NULL   NULL    07:12:00查询结果:
ID     AID    BID    CID     CHECKTIME
001    001    002    003     12:12:00

解决方案 »

  1.   

    只要一条记录么?select top 1 *
    from tb
    order by checktime desc
      

  2.   

    BID 和CID字段的值是怎么来的?
      

  3.   

    select top 1 * from tb1 order by checktime desc但你的结果怎么来的,没看明白.
      

  4.   

    select top 1 ID,AID,ISNULL(BID,AID+1),ISNULL(CID,AID+2),CHECKTIME from tb1 
      

  5.   


    查询的结果是只有一条记录。
    这个语句只能查询最理想状态下,即AID,BID,CID都不为NULL时的记录。
    比如说,如果CID=NULL,则用比这条记录早的记录的AID填充。ID    AID    BID    CID    CHECKTIME 
    001   001    002    NULL    12:12:00 
    001   003    NULL   NULL    09:12:00 
    001   003    NULL   NULL    07:12:00 这种情况,CHECKTIME =‘12:12:00’时,CID=NULL,所以结果的
    CID=AID WHERE CHECKTIME =‘12:12:00’查询结果为: 
    ID    AID    BID    CID    CHECKTIME 
    001    001    002    003    12:12:00
      

  6.   

    还有这样的情况:
    ID    AID    BID    CID    CHECKTIME 
    001    001   NULL  NULL    12:12:00 
    001    002   003   NULL    09:12:00 
    001    001   NULL  NULL    07:12:00 查询结果: 
    ID    AID    BID    CID    CHECKTIME 
    001   001    002    003    12:12:00 请注意结果中的CID的值等于第二条记录的BID.
      

  7.   


    1、 
    ID    AID    BID    CID    CHECKTIME 
    001    001    NULL  NULL    12:12:00 
    001    002    NULL  NULL    09:12:00 
    001    003    NULL  NULL    07:12:00 查询结果: 
    ID    AID    BID    CID    CHECKTIME 
    001    001    002    003    12:12:00 结果应该是如下两个中的一个才对.ID    AID    BID    CID    CHECKTIME 
    001    001    002    002    12:12:00 ID    AID    BID    CID    CHECKTIME 
    001    001    003    003    12:12:00 
      

  8.   

    貌似直接使用SQL语句很难实现,得使用循环或游标了.
      

  9.   

    游标的基本写法declare @id int,@name varchar(20);
    declare cur cursor fast_forward for
      select id,name from a;
    open cur;
    fetch next from cur into @id,@name;
    while @@fetch_status=0
    begin
       --做你要做的事
       fetch next from cur into @id,@name;
    end
    close cur;
    deallocate cur;
      

  10.   

    select top 1 *
    from tb
    order by checktime desc
      

  11.   

    select top 1 aid  as bid into #d  from tb a where exists (select 1 from tb   where  a.checktime < checktime) order by checktime desc
    --把第二晚的checktime的aid 作为bid into到#dselect top 1 bid  as cid into #e  from tb a where exists (select 1 from tb   where  a.checktime < checktime) order by checktime desc
    --把第二晚的checktime的bid 作为cid into到#eselect id,aid,isnull(bid,(select bid from #d ) ) ,isnull(cid,(select cid from #e)) ,checktime  from tb a  where not exists (select 1 from tb   where  a.checktime < checktime)
    --把最晚时间的记录select出来,并把bid和cid为null的替换成第二晚时间的aid和bid当然,第二晚的记录的那2个字段值不能为null才行。。
      

  12.   

    select 
    top 1 * 
    from 
    tb 
    order by 
    checktime 
    desc