日期:2014-05-17  浏览次数:20690 次

咨询一个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楼提供的方案,可以先执行以下,或者,把相关的执行计划贴上来,再做分析。
------解决方案--------------------
探讨
求最大,那么分组,排序这个过程必不可少,在千万级的数据里,能快到什么程序,不好说。
2楼提供的方案,可以先执行以下,或者,把相关的执行计划贴上来,再做分析。