select * from telcombak b
where CONNECTDT>2004101100000000 and CONNECTDT<2004101200000000 
and exists(select min(TELEPHONENO) from telcombak a where a.TELEPHONENO=b.TELEPHONENO  group by a.TELEPHONENO having count(*)>4

解决方案 »

  1.   

    select 
       * 
    from 
      telcombak a,
      select min(TELEPHONENO) from telcombak a where CONNECTDT>2004101100000000 and CONNECTDT<2004101200000000 group by TELEPHONENO having count(*)>4 ) b
    where a.TELEPHONENO=b.TELEPHONENO;
      

  2.   

    SQL语句中"*",尽量列出你自己的需要的字段,"*"时SQL还要对其进行解析
    "<",">"最好想办法改成"<=",">="这样写SQL也可以得到一些优化
    还有WHERE语句里第一个"="时最好用关键字段.
    数据文件很庞大时,SQL优化很重要.我也是刚接触ORACLE各位大虾以后请多指教.
      

  3.   

    提高效率少用in,not in,having等,可以用exists代替in,where代替having
    我想你这影响速度的主要原因是group by
      

  4.   

    把  CONNECTDT > 2004101100000000
       and CONNECTDT < 2004101200000000
    这两个条件写到 where条件的最后