例如name      sex       old
name1      1         10
name2      1         11
name3      2         12期望得到结果name1    1  11
name2    2  12
解释:
按照sex分组,sex=1的有两条数据,按照old倒序获得结果
name1    1  11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
name2    2  12

解决方案 »

  1.   

    啥意思,看不懂,是不是按sex分组,取最小的name和最大的old
    select min(name) name,sex,max(old) from tab group by sex
      

  2.   

    楼主是要
    name2 1 11
    name3 2 12还是
    name1 1 11
    name2 2 12
      

  3.   

    name sex old
    name1 1 10
    name2 1 11
    name3 2 12期望得到结果name2 1 11
    name3 2 12
    解释:
    按照sex分组,sex=1的有两条数据,按照old倒序获得结果
    name2 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
    name3 2 12
      

  4.   

    不好意思写错了啊。name sex old
    name1 1 10
    name2 1 11
    name3 2 12期望得到结果name2 1 11
    name3 2 12
    解释:
    按照sex分组,sex=1的有两条数据,按照old倒序获得结果
    name2 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
    name3 2 12这个意思啊。
      

  5.   

    select * from tab where old in (select max(old) from tab group by sex)
      

  6.   


    按照sex分组,sex=1的有两条数据,按照old倒序获得结果
    name1 1 11按照sex分组,sex=2的有一条数据,按照old倒序获得结果
    name2 2 12select name,sex,old
    from (select name,sex,old,row_number() over(partition by sex order by old desc) rn
    from tb) where rn=1--or
    select name,sex,old
    from tb a
    where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)--or
    select name,sex,old
    from tb a
    where a.old=(select max(old) from tb b where a.sex=b.sex)--or
    select name,sex,old
    from tb a,(select sex,max(old) old from tb group by sex) b
    where a.sex=b.sex and a.old=b.old
      

  7.   


    with tb as(
    select 'name1' name,1 sex,10 old from dual union all
    select 'name2', 1, 11 from dual union all
    select 'name3', 2, 12 from dual)
    --以上为提供数据的语句
    select name,sex,old
    from tb a
    where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)
    NAME         SEX        OLD
    ----- ---------- ----------
    name2          1         11
    name3          2         12
      

  8.   

    麻烦问下那个效率最高啊?select name,sex,old
    from (select name,sex,old,row_number() over(partition by sex order by old desc) rn
    from tb) where rn=1--or
    select name,sex,old
    from tb a
    where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)--or
    select name,sex,old
    from tb a
    where a.old=(select max(old) from tb b where a.sex=b.sex)--or
    select name,sex,old
    from tb a,(select sex,max(old) old from tb group by sex) b
    where a.sex=b.sex and a.old=b.old这几个。
      

  9.   


    oracle显示sql语句执行时间命了:set timing on ;SQL> set timing on;
    SQL> with tb as(
      2  select 'name1' name,1 sex,10 old from dual union all
      3  select 'name2', 1, 11 from dual union all
      4  select 'name3', 2, 12 from dual)
      5  select name,sex,old
      6  from tb a
      7  where not exists(select 1 from tb b where a.sex=b.sex and a.old<b.old)
      8  /NAME         SEX        OLD
    ----- ---------- ----------
    name2          1         11
    name3          2         12Executed in 0 secondsSQL> /NAME         SEX        OLD
    ----- ---------- ----------
    name2          1         11
    name3          2         12Executed in 0.016 secondsSQL> 
      

  10.   

    这个效率最高,因为不需要where:with tb as(
    select 'name1' name,1 sex,10 old from dual union all
    select 'name2', 1, 11 from dual union all
    select 'name3', 2, 12 from dual)
    --以上为提供数据的语句
    select max(name) keep(dense_rank last order by old) name,
           sex,
           max(old)
    from tb
    group by sex
      

  11.   

    支持用group   那几种写法麻烦  简单才高效