Oracle 查询查找记录的处理时间超过 24 小时

Posted

技术标签:

【中文标题】Oracle 查询查找记录的处理时间超过 24 小时【英文标题】:Oracle query to find records took more than 24hrs to process 【发布时间】: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 - 不管你个人觉得隐式连接语法多么烦人,它在这里的使用与问题无关。 【参考方案1】:

我认为您的很多问题很可能源于您在内部查询的列列表中使用了子查询。也许尝试使用分析函数。像这样的:

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,
               MIN(tbl2.recived_on) OVER (PARTITION BY tbl2.filename) AS recived_on,
               tbl1.loaded_On
        FROM   Table1 tbl1
        INNER JOIN Table1 tbl2 ON tbl1.id = tbl2.id
        WHERE    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;

另外,您在内部查询中选择了一些列并且没有使用它们,所以我删除了它们。

【讨论】:

以上是关于Oracle 查询查找记录的处理时间超过 24 小时的主要内容,如果未能解决你的问题,请参考以下文章

如何在 postgresql 中进行查询,以查找所有启动时间超过 6 小时的记录?

Oracle SQL 更新查询需要几天时间才能更新

Oracle查询查找表中不存在的记录?

如何在 Oracle 中查找 SQL 查询中返回的记录的内存大小?

Oracle查询优化改写--------------------单表查询

如果在单个请求中与 Oracle 和 PostgreSql 交互以处理超过 20 万条记录,如何提高 EF Core 性能