查询速度太慢,高手给优化一下,谢谢!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
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
解决方案 »
- 如何利用oms进行数据的导入导出工作!
- oracle 如何对多个字段同时排名时,并加上本字段非空的个数
- 请教高手解决一张oracle复杂报表
- 在导入过程中出现“SQL*Loader-404: 列 在 YQ_CS 的 INTO TABLE 块中出现的次数不止一次。”是为什么?
- 关于根据字段中的一部分值分组
- 关于导入,导出oracle数据库的问题?
- ROWDEPENDENCIES
- 为鼓励大家及时结帖,能做到及时结帖的同志们进来领分:)
- 紧急求助 EXP-00003错误!!!(分不够再加)
- 正在连接...ORA-01034: ORACLE not available,为什么??
- 请教一个数据库查询高难度题,请指教,万分感谢
- ORACLE中插入数据的问题(分可以再加)
日期格式为:yyyy-mm-dd浮起
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
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
FROM 数据采集_采气井 CTable
WHERE CTable.单位名称 = 单位名称
AND CTable.日期 <= 日期
AND SUBSTR(CTable.日期,1,7)=SUBSTR(日期,1,7) 执行后是有值的
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 执行后 月累产气量和月累外输气量查不到数据,其余数据正确