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

查询时日期为变量,查询时间过长
我有2个表,
efresh表(serialno varchar2,datesold date)包含终端序号和销售日期
test_rock表(weekno number,startdate date,cnt number)包含weekno周序号,是从固定日期开始算的1到n的整数;
startdate每周的开始日期,cnt每周活跃的终端计数。这个表的weekno和startdate是固定好的,需要得到的是cnt。

SQL语句的目的是以t.weekno分组,把cnt统计出来。
但是运行时间很长,不知道问题出在哪里。大家帮忙看看
select t.weekno,count(distinct(e.serialno)) as cnt
from efresh e,test_rock t 
where (e.datesold between t.startdate and (t.startdate+7))
group by t.weekno

单独运行,这个没问题
select count(distinct(e.serialno)) as cnt
from efresh e,test_rock t 
where (e.datesold between t.startdate and (t.startdate+7))
and t.weekno=89

如果给test_rock表增加一个字段enddate让它等于startdate
这样的话,运行时间不超过10秒就出来。
select t.weekno,count(distinct(e.serialno)) as cnt
from efresh e,test_rock t 
where (e.datesold between t.startdate and enddate)
group by t.weekno


------解决方案--------------------
如果给test_rock表增加一个字段enddate让它等于startdate

好像没什么可比性,为什么不让它等于startdate+7试试呢