表TA有3个字段(A1,A2,A3),有2个主键(A1,A2)
A1      A2      A3
B E0001 1
B E0002 1
T E0003 2
B E0004 3
B E0005 3查询语句
SELECT * FROM TA WHERE (A1, A3) IN (SELECT A1, MAX(A3) FROM TA GROUP BY A1)
查询出的结果是
A1      A2      A3
T E0003 2
B E0004 3
B E0005 3但是我想查询出来的结果只有一个B的以下是我想要的结果:
A1      A2      A3
T E0003 2
B E0004 3

解决方案 »

  1.   


    SELECT * FROM TA WHERE (A2) IN (SELECT A2  FROM (SELECT A2,MAX(A3) FROM TA GROUP BY A1) )
      

  2.   

    select * from TA t where not exists(select 1 from TA where A1=t.A1 and A2=t.A2 and A3>t1.A3)
      

  3.   

    select * from (select TA.*,rownumber() over(partition by A1,A3 order by A1,A3) as rn from TA) where rn=1
      

  4.   

    SELECT * FROM TEST T WHERE ROWID IN(
    SELECT MAX(ROWID) FROM TEST WHERE A1=T.
      

  5.   

    select * from TEST t where NOT exists(select 1 from TEST where A1=t.A1 and T.ROWID<TEST.ROWID);
      

  6.   

    Oracle Codecreate table tb (A1 varchar(2), A2 varchar(10), A3 number, primary key(A1, A2));
    insert into tb  select 'B', 'E0001', 1 from dual;
    insert into tb  select 'B', 'E0002', 1 from dual;
    insert into tb  select 'T', 'E0003', 2 from dual;
    insert into tb  select 'B', 'E0004', 3 from dual;
    insert into tb  select 'B', 'E0005', 3 from dual;select * from tb t where A2 = (select max(A2) from tb where A1 = t.A1);结果
    A1 A2 A3T E0003 2
    B E0005 3