表 A:running_no   NAME    OPT     OPTDATE
1            张三    定购    20080301
2            李四    定购    20080302
3            张三    注销    20080306
4            王五    定购    20080307
5            李四    注销    20080312
6            张三    定购    20080319要求显示日期最近的用户的状态,如下
NAME    OPT     OPTDATE
张三    定购    20080319
李四    注销    20080312
王五    定购    20080307

解决方案 »

  1.   

    order by optdate或者order by optdate desc具体哪个忘了
      

  2.   

    select NAME   , OPT   ,  OPTDATE from (
    select NAME   , OPT   ,  OPTDATE,row_number() over(partition by name order by OPTDATE desc ) rn from A
    )
    where rn=1
      

  3.   

    select a.NAME,a.OPT,a.OPTDATE
    from a inner join (select NAME,max(OPTDATE) as maxOPTDATE from a group by NAME) b on a.NAME=b.NAME and a.OPTDATE=b.maxOPTDATE;
    == 思想重于技巧 ==
      

  4.   

    select NAME   , OPT   ,  OPTDATE from ( 
    select NAME   ,  max(OPTDATE) maxdate from A) B , A 

    where A.NAME=B.NAME and A.OPTDATE=B.maxdate;
      

  5.   

    select NAME ,OPT ,OPTDATE from (  
    select NAME  ,OPT  ,    max(OPTDATE) OPTDATE from A) order by OPTDATE ;