查询速度太慢,高手给优化一下,谢谢!SELECT
CQJ.日期 日期,
SUNIT.UNIT_RELATION 队名,
CQJ.单位名称 站别,
(
     SELECT SUM(日产气)
     FROM 数据采集_采气井 CTable
     WHERE  CTable.单位名称 = CQJ.单位名称
     AND CTable.日期<=CQJ.日期
     AND SUBSTR(CTable.日期,1,7)=SUBSTR(CQJ.日期,1,7)
)
AS 月累产气量,
(
     SELECT SUM(日外输气量)
     FROM 数据采集_集气站 CTable
     WHERE  CTable.单位名称 = CQJ.单位名称
     AND CTable.日期<=CQJ.日期
     AND SUBSTR(CTable.日期,1,7)=SUBSTR(CQJ.日期,1,7)
)
AS 月累外输气量
FROM 数据采集_采气井 CQJ,数据采集_集气站 JQZ,SYS_UNIT SUNIT
WHERE CQJ.单位名称 = SUNIT.UNIT_NM
group by CQJ.日期,CQJ.单位名称,SUNIT.UNIT_RELATION
having count(*)>1

解决方案 »

  1.   

    补充:
        日期格式为:yyyy-mm-dd浮起
      

  2.   

    SELECT 
    CQJ.日期 日期, 
    SUNIT.UNIT_RELATION 队名, 
    CQJ.单位名称 站别, 
    SUM(case when CTable.日期 <=CQJ.日期 AND SUBSTR(CTable.日期,1,7)=SUBSTR(CQJ.日期,1,7) then CTable.日产气 else 0 end) 
         AS 月累产气量, 
    SUM(case when CTable.日期 <=CQJ.日期 AND SUBSTR(CTable.日期,1,7)=SUBSTR(CQJ.日期,1,7) then CTable.日外输气量 else 0 end) 
         AS 月累外输气量 
    FROM 数据采集_采气井 CQJ,数据采集_集气站 JQZ,SYS_UNIT SUNIT,数据采集_采气井 CTable  
    WHERE CQJ.单位名称 = SUNIT.UNIT_NM
      and CTable.单位名称 = CQJ.单位名称 
    group by CQJ.日期,CQJ.单位名称,SUNIT.UNIT_RELATION 
    having count(*)>1
      

  3.   

    --计算月累产气量
    create or replace function CALCU_yljql(
        v_RQ       varchar , --日期
        V_dwmc       VARCHAR  --单位名称
        )
    return number
      IS
      v_cl number;
      BEGIN
        SELECT SUM(日产气) 
         into v_cl
         FROM 数据采集_采气井 CTable 
         WHERE  CTable.单位名称 = V_dwmc 
         AND CTable.日期 <= v_RQ 
         AND SUBSTR(CTable.日期,1,7)=SUBSTR(v_RQ,1,7) ;
        RETURN (v_cl);
      END CALCU_yljql;--月累外输气量
    create or replace function CALCU_ylwsql(
        v_RQ       varchar , --日期
        V_dwmc       VARCHAR  --单位名称
        )
    return number
      IS
      v_cl number;
      BEGIN
        SELECT SUM(日外输气量)
          into v_cl 
         FROM 数据采集_集气站 CTable 
         WHERE  CTable.单位名称 = V_dwmc 
         AND CTable.日期 <= v_RQ 
         AND SUBSTR(CTable.日期,1,7)=SUBSTR(v_RQ,1,7); 
        RETURN (v_cl);
      END CALCU_ylwsql;
    SELECT 
    CQJ.日期 日期, 
    SUNIT.UNIT_RELATION 队名, 
    CQJ.单位名称 站别, 
    CALCU_yljql(CQJ.单位名称,CQJ.日期) AS 月累产气量, 
    CALCU_ylwsql(CQJ.单位名称,CQJ.日期) AS 月累外输气量 
    FROM 数据采集_采气井 CQJ,SYS_UNIT SUNIT 
    WHERE CQJ.单位名称 = SUNIT.UNIT_NM 
    group by CQJ.日期,CQJ.单位名称,SUNIT.UNIT_RELATION
      

  4.   

    数据采集_集气站 JQZ在最外SQL中未用到,不需要联
      

  5.   

    用一对数测试下CALCU_yljql,看有值吗?
      

  6.   

    SELECT SUM(日产气)  
         FROM 数据采集_采气井 CTable  
         WHERE  CTable.单位名称 = 单位名称  
         AND CTable.日期  <= 日期  
         AND SUBSTR(CTable.日期,1,7)=SUBSTR(日期,1,7) 执行后是有值的
      

  7.   

    SELECT  
    CQJ.日期 日期,  
    SUNIT.UNIT_RELATION 队名,  
    CQJ.单位名称 站别,  
    CALCU_yljql('集气1号站','2008-02-01') AS 月累产气量,  
    CALCU_ylwsql('集气1号站','2008-02-01') AS 月累外输气量  
    FROM 数据采集_采气井 CQJ,SYS_UNIT SUNIT  
    WHERE CQJ.单位名称 = SUNIT.UNIT_NM  执行后 月累产气量和月累外输气量查不到数据,其余数据正确