如题.oracle去重需要考虑效率和可操作性,group by比较麻烦,overpartion by比较方便。. 下面是本人关于over partion by的两点经验.
2.技巧.
(1) 用over partion by比用group by+max好点。
(2)根据rownum<100000等操作,取最新的条件,这样可以避免全表扫描.
3.代码。
select * from( select tName, sName, taName, aId, cTime, rCode, rid, Row_number() OVER (PARTITION BY tName,sName,taName,aId ORDER BY rid desc) rn from (select a.id rid, b.t_name tName, a.s_name sName, a.rcode rCode, c.tname taName, a.accid aId, a.CTM cTime from a, b, c where a.t_type = b.t_code and a.t_id = c.id and a.acc_id ='11111' and rownum<100000 order by cTime desc,tName,sName,taName,rCode ) order by cTime desc ) where rn=1
这里over partion by 直接用形如
Row_number() OVER (PARTITION BY tName,sName,taName,aId ORDER BY rid desc) rn
的分组计数器放到要查询的记录最后门,然后包起来用rn=1来去重就可以了,简单粗暴方便,推荐。