Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle查询获取速度非常慢_Sql_Oracle_Performance_Query Optimization - Fatal编程技术网

Sql oracle查询获取速度非常慢

Sql oracle查询获取速度非常慢,sql,oracle,performance,query-optimization,Sql,Oracle,Performance,Query Optimization,我正在尝试运行以下sql:。但它并没有获取结果,运行了5个多小时 SELECT TD.TIME_KEY, CUST.SITE_ID, CUST.NODE, COUNT(CUST.ACCOUNT_NUMBER) AS CUSTOMER_CNT FROM TIME_DIM TD INNER JOIN OSP_ACTIVE_SUB_STAGE CUST ON TIME_KEY BETWEEN CUST.CONNECT_DATE AND (CASE WHEN CUST.CUSTOMER_

我正在尝试运行以下sql:。但它并没有获取结果,运行了5个多小时

SELECT TD.TIME_KEY, CUST.SITE_ID, CUST.NODE, 
       COUNT(CUST.ACCOUNT_NUMBER) AS CUSTOMER_CNT
FROM
TIME_DIM TD INNER JOIN
OSP_ACTIVE_SUB_STAGE CUST ON TIME_KEY BETWEEN CUST.CONNECT_DATE AND (CASE WHEN CUST.CUSTOMER_STATUS_CODE = 'A' THEN SYSDATE ELSE CUST.STATUS_DATE END)
WHERE TD.TIME_KEY >= '01-JAN-14'
GROUP BY TD.TIME_KEY, CUST.SITE_ID, CUST.NODE
表OSP_活动_子_阶段的结构:

Name                  Null Type        
--------------------- ---- ----------- 
SITE_ID                    NUMBER(3)   
NODE                       VARCHAR2(5) 
HOUSE_NUMBER               NUMBER(10)  
HOUSE_RESIDENT_NUMBER      NUMBER(10)  
ACCOUNT_NUMBER             NUMBER(10)  
CONNECT_DATE               DATE        
STATUS_DATE                DATE        
CUSTOMER_STATUS_CODE       VARCHAR2(1)
时间维度是正常的时间维度表

如何改进和增加此查询的运行时间或重写此查询

谢谢

这是您的问题:

SELECT TD.TIME_KEY, CUST.SITE_ID, CUST.NODE, COUNT(CUST.ACCOUNT_NUMBER) AS CUSTOMER_CNT
FROM TIME_DIM TD INNER JOIN
     OSP_ACTIVE_SUB_STAGE CUST
     ON TIME_KEY BETWEEN CUST.CONNECT_DATE AND 
        (CASE WHEN CUST.CUSTOMER_STATUS_CODE = 'A' THEN SYSDATE ELSE CUST.STATUS_DATE END)
WHERE TD.TIME_KEY >= '01-JAN-14';
GROUP BY TD.TIME_KEY, CUST.SITE_ID, CUST.NODE
哎呀!那里有很多计算。你需要一种不同的方法。创建一个包含连接和结束的表,然后使用累积和,而不是在期间的每一天进行连接

假设所有站点/节点组合每天都有连接或结束,您可以执行以下操作:

  select site_id, node, dte, sum(inc) as ActivesOnDate
  from ((select oass.site_id, oass.node, oass.connect_date as dte, 1 as inc
         from osp_active_sub_stage oass
        ) union all
        (select oass.site_id, oass.node,
                (case when oass.customer_status_code = 'A'
                      then trunc(sysdate)
                      else oass.status_date + 1
                 end) , -1 as inc
         from osp_active_sub_stage oass
        )
       )
  group by site_id, node, dte;

此查询的运行速度应比原始版本快一点。

此查询未与time\u dim表联接以获取大于1-JAN-14的行。@User146831。的确如此。如果您在每个日期至少有一个连接/结束,那么这是不必要的。