架构师之oracle--------------over partion by代替group by去重

1.前言.
   如题.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来去重就可以了,简单粗暴方便,推荐。

猜你喜欢

转载自nannan408.iteye.com/blog/2203299