select * from 
(select  field_a,field_b,max(xx) 
from tableX
group by  field_a,field_b) t1,tablex t2
where t1.field_a=t2.field_a and t1.field_b=t2.field_b and t1.max_xx=t2.xx

解决方案 »

  1.   

    select rowid,field_a,field_b,xx
    from (select  rowid,field_a,field_b,xx,
          rank() over (partition by field_a,field_b order by xx desc ) rk from tableX 
          ) a
    where rk=1
      

  2.   

    一条记录有一个唯一的rowid没错,group by后得到的结果是分组,分组数据并没有rowid的说法,这是因为一个分组可能来源于一条或多条记录
      

  3.   

    group 后的数据是无法反推的
      

  4.   

    rowid 在group 的时候是不能加在 select列表中的, 而且返回的每一行数据可能包含多个rowid ,只能这样做,就是自定义一个聚集函数,返回将多个rowid 用分隔符连接起来的字符串。比如wm_concat这个函数select  wm_concat(rowid),field_a,field_b,max(xx) from tableX group by  field_a,field_b