where a.ename=b.ename这个条件导致了按照name分组。
每次都会和外层b表的ename进行连接,其实就相当于求出了每个ename中最大的rowid

解决方案 »

  1.   

    select *
      from (select ROW_NUMBER() OVER(ORDER BYb.rowid DESC) RANK_NUM,
                   b.rowid,
                   b.*  from bonus b where b.rowid)
     where rank_num = 1
    这样写应该就是你要的效果了
      

  2.   

    我试着给你逐一解答下select b.rowid,b.* from bonus b where b.rowid =(select max(rowid) from bonus a where a.ename=b.ename);--1、select max(rowid) from bonus a where a.ename=b.ename
      -- 这句是根据b.ename求到这个ename的最大的物理存储地址,即根据ename找到重复值中的最大的一个地址值。
    --2、select b.rowid,b.* from bonus b where b.rowid =(select max(rowid) from bonus a where a.ename=b.ename);
      --所以外层sql意思是根据嵌套sql里面的物理地址查询,直接查询的是bonus表中根据name分组后的最大值,即去重其他值。