select b.* from DutyInfo b
,
(select  MAX(a.DutyDate) DutyDate,sign as sign 
from DutyInfo a group by a.sign) a 
where b.DutyDate=a.DutyDate 
order by b.DutyDate现在这个不能添加查询条件  我的需求是比如有一下数据
表 DutyInfo
DutyDate   DutyName  sign
20130515     A         1
20130516     B         1
20130517     C         2
20130518     A         1
20130519     B         2
20130520     C         2
20130521     A         1
我要找出sign分别为1和2且DutyDate最大的一组数据   要能添加DutyDate条件比如DutyDate小于 大于 或者在两个数之间   我上面那个就是不能添加条件 一添加条件就不显示数据了。(因为上面的语句默认是在已有数据中找出最大的1和2,所以一添加条件就屏蔽了最大两个Dutydate,才不显示数据了)
谢谢各位大侠了!!!!!SQL Server行业数据SQLselect

解决方案 »

  1.   


    --2000以上
    select a.*,b.DutyName from 
    ( select MAX(DutyDate) DutyDate,sign
    from @DutyInfo
    --where条件加这里
    group by sign ) as a  
    join @DutyInfo as b on a.DutyDate=b.DutyDate and a.sign=b.sign
    order by a.DutyDate--2005以上
    select MaxDate Dutydate,DutyName,SIGN
    from (select DutyDate, DutyName,sign,MAX(DutyDate) over (partition by sign) MaxDate
    from @DutyInfo 
    --where条件加这里
    ) as a
    where DutyDate=MaxDate
    order by a.DutyDate
      

  2.   


    select MaxDate Dutydate,DutyName,sign
    from (select DutyDate, DutyName,sign,MAX(DutyDate) over (partition by sign) MaxDate
    from @DutyInfo 
    (条件)
    ) as a
    where DutyDate=MaxDate
    order by a.DutyDate