有一张表A 数据如下:
ID   列1  列2  列3
AA   B1   C1    200
AA   B1   C2    200
AA   B2   C2    100
BB   B1   C1    200
BB   B2   C1    100
CC   B1   C1    200
CC   B1   C2    300
CC   B1   C3    200
DD   B1   C1    100要求:返回结果为 同一个“ID” “列3”值最大的那条记录,返回整行,同时仅返回单条
(仅“列3”最大的那1条,如果多条“列3”都一样最大,则返回第1条)。如是上述表则返回
ID   列1  列2  列3
AA   B1   C1    200
BB   B1   C1    200
CC   B1   C2    300
DD   B1   C1    100

解决方案 »

  1.   

    seelct aa.id,aa.列1,aa.列2,aa.列3
    from(
    select a.* ,rownum() over (partition by id order by 列3 desc) rn
    from a)
    where aa.rn=1
      

  2.   

    select * from a where rownum in
    (select min(rownum) from a where id=
      (select distinct id from a where 列3 in
        (select max(列3) from a group by id)
      ) group by id
    )
      

  3.   

    select id,min(l1),min(l2),max(l3) from test group by id;
      

  4.   

    复杂了点,而且最后也是用到rownum的,你这多重嵌套查询了,相当于a表要查询四次,速度上有影响的
      

  5.   

    seLect BB.A,
           BB.B,
           BB.C,
           BB.D,
           bb.rn
    from( 
    select AA.* ,row_number() over(partition by A order by D desc) rn 
    from table_a AA ) BB
    where BB.rn=1
      

  6.   

    select id,max(l3) from test group by id;
      

  7.   

    CREATE TABLE my_tst_a(tsd_id VARCHAR2(20),one VARCHAR2(20),two VARCHAR2(20),three NUMBER);INSERT INTO my_tst_a VALUES ('AA','B1','C1',200);
    INSERT INTO my_tst_a VALUES ('AA','B1','C2',200);
    INSERT INTO my_tst_a VALUES ('AA','B2','C2',100);
    INSERT INTO my_tst_a VALUES ('BB','B1','C1',200);
    INSERT INTO my_tst_a VALUES ('BB','B2','C1',100);
    INSERT INTO my_tst_a VALUES ('CC','B1','C1',200);
    INSERT INTO my_tst_a VALUES ('CC','B1','C2',300);
    INSERT INTO my_tst_a VALUES ('CC','B1','C3',200);
    INSERT INTO my_tst_a VALUES ('DD','B1','C1',100);select * from my_tst_a t;
    ------------------------------
        TSD_ID ONE TWO THREE
    1 AA B1 C1 200
    2 AA B1 C2 200
    3 AA B2 C2 100
    4 BB B1 C1 200
    5 BB B2 C1 100
    6 CC B1 C1 200
    7 CC B1 C2 300
    8 CC B1 C3 200
    9 DD B1 C1 100SELECT t.*
    FROM   (SELECT dense_rank() over(PARTITION BY tsd_id ORDER BY three desc) rk,
                   row_number() over(PARTITION BY tsd_id ORDER BY three desc) rn,
                   t.*
            FROM   my_tst_a t) t
    WHERE  rk = rn
    AND    rk = 1----------------------------    RK RN TSD_ID ONE TWO THREE
    1 1 1 AA B1 C1 200
    2 1 1 BB B1 C1 200
    3 1 1 CC B1 C2 300
    4 1 1 DD B1 C1 100
      

  8.   

    1楼的很好,
    7楼的,有多个3相同,会除多条的
    你完整的是
    select * from table
    where (id,字段3)in (select id,max(字段3) form table group by id)
    或者
    select * from table t1,(select id,max(字段3) as max form table group by id) t2
    where t1.id=t2.di and t1.字段3=t2.max
      

  9.   

    数据量比较大的情况下,group by的速度快不到哪里去,
    个人觉得row_number() over 较好