我有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试试呢