咨询一个SQL优化问题。 create table t1 as select '香蕉' prod_name,'20120102' end_date from dual union select '香蕉','20120106' from dual union select '橘子','20120205' from dual union select '橘子','20120306' from dual union select '苹果','20120501' from dual union select '苹果','20120104' from dual union select '鸭梨','20120208' from dual union select '鸭梨','20120101' from dual
想取其中prod_name 的最大end_date 也就是如下:
香蕉 20120106 橘子 20120306 苹果 20120501 鸭梨 20120208
首先我的这张表是千万级的,想问最优化的SQL语句。
------解决方案-------------------- select * from (select t.*,row_numer()over(parttion by prod_name order by end_date ) rn from table ) where rn =1 先跑跑试试~~~~
------解决方案-------------------- 1、或者在建一个表,存放最大的日期,当向这个表插入数据的时候,与这个新表的日期做一个比较,如果大了,就更新新表的日期,用以保证新表存放的都是日期最大的数据
------解决方案-------------------- 求最大,那么分组,排序这个过程必不可少,在千万级的数据里,能快到什么程序,不好说。 2楼提供的方案,可以先执行以下,或者,把相关的执行计划贴上来,再做分析。
------解决方案--------------------