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 这样写应该就是你要的效果了
我试着给你逐一解答下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分组后的最大值,即去重其他值。
from (select ROW_NUMBER() OVER(ORDER BYb.rowid DESC) RANK_NUM,
b.rowid,
b.* from bonus b where b.rowid)
where rank_num = 1
这样写应该就是你要的效果了
-- 这句是根据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分组后的最大值,即去重其他值。