SELECT strguid,max(dtSysTime) as dtSysTime FROM  TbDetail  GROUP BY strDetectorId我要把时间最大的那条记录取出来,同时把strguid这个字段的值也取出来,该怎么办?

解决方案 »

  1.   

    select t.*
    from TbDetail t  
    where strguid
    exists (SELECT strguid,max(dtSysTime) as dtSysTime FROM  TbDetail  GROUP BY strDetectorId )
    另一个方法就是用分析函数 
      

  2.   

    select a.strguid,b.dtSysTime from 
    (SELECT strguid,dtSysTime FROM  TbDetail) a,
    (SELECT max(dtSysTime) as dtSysTime FROM  TbDetail) b
    where a.dtSysTime=b.dtSysTime
      

  3.   


    strDetectorId什么字段,跟strguid字段什么关系?
      

  4.   

    strDetectorId是编号,跟其它表相关联,strguid是TbDetail表的主键
      

  5.   

    用分析函数吧select strguid ,strDetectorId, dtSysTime
    from
    (select strguid ,strDetectorId, dtSysTime,row_number() over(partition by strDetectorId order by dtSysTime desc) rn
    from TbDetail)
    where rn=1
      

  6.   

    select *
    from
    (
    select t.*,row_number() over(partition by strDetectorId order by dtSysTime desc) rn
    from TbDetail t
    )
    where rn =1;
      

  7.   

    主要就是分析函数row_number() over()的用法,你看看
    http://hi.baidu.com/mrenterman/blog/item/e68046ca9aa14580c8176874.html
      

  8.   

    关于分析函数的,你可以看看:
    http://www.itpub.net/viewthread.php?tid=918204&highlight=%B7%D6%CE%F6%BA%AF%CA%FD还有
    http://zhouwf0726.itpub.net/post/9689/207598 
      

  9.   


    SELECT strguid,dtSysTime FROM  TbDetail a
    where not exists 
    (select 1 from TbDetail 
    where strDetectorId=a.strDetectorId 
    and dtSysTime>a.dtSysTime)