我有张表,表结构如下:
ID    NAME      DATE       NUM   STATUS
1     张三    2010-08-19    80     12
2     张三    2010-08-18    70     12
3     张三    2010-08-10    60     23
4     张三    2010-08-11    90     23
5     李四    2010-08-16    60     12
6     李四    2010-08-19    70     12
7     李四    2010-08-10    60     23
8     李四    2010-08-11    80     23我怎么查询出这样的结果啊?不同的人在同一status下最大的num
ID    NAME      DATE       NUM   STATUS
1     张三    2010-08-19    80     12
4     张三    2010-08-11    90     236     李四    2010-08-19    70     128     李四    2010-08-11    80     23

解决方案 »

  1.   

    按照name和status去分组,取num最大的id,关联一下就得到你想要的
      

  2.   

    WITH t1 AS(SELECT NAME,STATUS,MAX(num) num FROM TABLEa GROUP BY NAME,status)
    SELECT ID NAME DATE NUM STATUS FROM tablea  a
     WHERE EXISTS(SELECT 1 FROM t1 b WHERE a.name=b.name AND a.status=b.status AND a.num=b.num) 
      

  3.   


    select a.*
    from
    (
    select name,status,max(num) num
    from table_name t
    group by name,status
    ) a,table_name b
    where a.name=b.name and a.status=b.status and a.num=b.num
    不过这个方法有个缺陷,要是对象name一样、status一样而且num也一样的记录,2条都会显示出来
      

  4.   


    SELECT * FROM (SELECT ROW_NUMBER () OVER( PARTITION BY STATUS
    ORDER BY NUM DESC) RN,A.* FROM YOUR_TABLE A) B
    WHERE B.RN=1
      

  5.   


    select A.* from 表A,(select NAME,STATUS, max(num) as maxnum from 表A group by NAME,STATUS ) 表B 
    where A.NAME = B.NAME and A.STATUS = B.STATUS and a.num = b.maxnum  
      

  6.   

    SELECT * FROM (SELECT ROW_NUMBER () OVER( PARTITION BY name,STATUS
    ORDER BY NUM DESC) RN,A.* FROM YOUR_TABLE A) B
    WHERE B.RN=1;
    用分析函数按名字和状态分区,然后按num逆向排序取编号,再在外层取编号为1的数据。4楼的高手分区那里少写了个字段。