【发布时间】:2020-04-06 14:49:21
【问题描述】:
我遇到的情况是,我必须从在 DW 中两次加载超过 24 小时的表中找出此类记录。
所以为此我有两张桌子
- 表 1 :- 其中包含有关每个负载的统计信息
- 表 2:- 其中包含有关我们何时收到要加载的每个文件的统计信息
现在我只想要那些加载时间超过 24 小时的记录。 我收到文件的日期在表 2 中,而当它的加载完成时在表 1 中,因此 table2 的每个文件可能有多个条目。
我开发了以下查询,但需要更多时间
SELECT
rcd.file_date,
rcd.recived_on as "Date received On",
rcd.loaded_On "Date Processed On",
to_char(rcd.recived_on,'DY') as "Day",
round((rcd.loaded_On - rcd.recived_on)*24,2) as "time required"
FROM (
SELECT
tbl1.file_date,
(SELECT tbl2.recived_on
FROM ( SELECT recived_on
FROM table2
Where fileName = tbl1.feedName
order by recived_on) tbl2
WHERE rownum = 1) recived_on,
tbl1.loaded_On,
to_char(tbl2.recived_on,'DY'),
round((tbl1.loaded_On - tbl2.recived_on)*24,2)
FROM Table1 tbl1 ,
Table1 tbl2
WHERE
tbl1.id=tbl2.id
AND tbl1.FileState = 'Success'
AND trunc(loaded_On) between '25-Feb-2020' AND '03-Mar-2020'
) rcd
WHERE (rcd.loaded_On - rcd.recived_on)*24 > 24;
【问题讨论】:
-
您的具体问题是什么?
-
首先,连接两个表时应该使用现代
JOIN语法。 -
@ErgiNushi - 不管你个人觉得隐式连接语法多么烦人,它在这里的使用与问题无关。
标签: oracle plsql query-optimization