SQL 查询中的未来日期记录逻辑

问题描述 投票:0回答:1

我有一个表,其中包含步骤详细信息 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 日选择该日期;相反,它会在当前日期被选择。 如何调整查询来解决此问题并确保其适用于未来的场景?

sql oracle oracle-sqldeveloper
1个回答
0
投票

我认为你应该改变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'
       ))
© www.soinside.com 2019 - 2024. All rights reserved.