【发布时间】:2018-03-20 14:37:08
【问题描述】:
我需要从 (previous ACTUAL_START_DATE + RUN_DURATION) 中减去当前的 REQ_START_DATE,以检查在上一次执行完成之前是否请求作业的时间。
尝试使用以下查询:
WITH delay_in_start AS (
SELECT LOG_ID, LOG_DATE, OWNER, JOB_NAME, REQ_START_DATE, ACTUAL_START_DATE,run_duration, ROW_NUMBER() OVER (PARTITION BY job_name ORDER BY req_start_date desc) RN
FROM dba_scheduler_job_run_details t
)
SELECT cast(A.req_start_date as date) - cast((B.ACTUAL_START_DATE + b.run_duration) as date) Consumption, a.*, b.*
FROM delay_in_start A LEFT JOIN delay_in_start B
ON B.JOB_NAME = A.JOB_NAME
AND A.RN = B.RN - 1
where cast(A.req_start_date as date) > (cast(B.ACTUAL_START_DATE as date) + b.run_duration)
但不确定输出。
有人可以帮忙吗?
【问题讨论】:
-
您不确定什么?您没有显示任何示例数据、当前输出或预期输出,因此我们没有太多工作要做。 (另外,查看 lag 函数以查看前一行,而不是使用带有行号的子查询;您可能会发现它更简单。)
-
滞后函数对日期数据类型没有帮助。由于 dba_scheduler_job_run_details 是作业视图并且存在于全球范围内,因此我没有提供示例。我的要求是只计算作业的 req_start_date(最后一次执行)不应该小于作业的实际开始日期 + run_duration(第二次最后执行)
-
你对滞后的看法是错误的,但这是一个附带问题。你还没有说出你不确定的事情。如果您只想查看那些重叠的部分,您是否在 where 子句中刚刚使用了
>而不是<?
标签: oracle date datetime jobs job-scheduling