我有一个表,其中包含步骤详细信息 PER_GRADE_STEPS_F_VL。我在表 ess_request_history 中有一个处理日期列,当我们执行运行此报告的作业时,该列会更新。 当 PER_GRADE_STEPS_F_VL 上进行的最新更新 >= 上次执行 ess_request_history 时,应提取成绩步骤详细信息。 为此,我创建了以下查询-
select * from
(
select grade_step_name,
grade_code,
grade_sequence,
Max(last_update_date) OVER( partition BY GRADE_STEP_ID) max_update_date
grade_effective_start_date
from PER_GRADE_STEPS_F_VL
where :effectivedate between grade_effective_start_date and grade_effective_end_date
)
where :attribute = 'N'
or (
:attribute='Y'
and max_update_date >=
(
(SELECT Max(processstart)
FROM fusion.ess_request_history erh,
fusion.ess_request_property erp
WHERE erh.requestid = erp.requestid
AND state = 12
AND erp.NAME = 'reportID'
))
)
目前查询功能正常;但是,当
grade_effective_start_date
是未来日期而 max_update_date
是今天的日期时,就会出现问题。例如,如果 grade_effective_start_date
设置为 01-Dec-2023,并且 max_update_date
为 16-Nov-2023,则查询不会捕获此场景。我想修改查询,以便如果 grade_effective_start_date
是 2023 年 12 月 1 日,则查询在 2023 年 12 月 1 日执行时返回输出。当前逻辑(其中 max_update_date
是今天的日期)会阻止在 2023 年 12 月 1 日选择该日期;相反,它会在当前日期被选择。
如何调整查询来解决此问题并确保其适用于未来的场景?
我认为你应该改变where条件如下:
where :attribute = 'N'
or (
:attribute='Y'
and least(max_update_date,grade_effective_start_date) >=
(
(SELECT Max(processstart)
FROM fusion.ess_request_history erh,
fusion.ess_request_property erp
WHERE erh.requestid = erp.requestid
AND state = 12 AND erp.NAME = 'reportID'
))