提问人:Tech_Girl7819 提问时间:11/17/2023 最后编辑:Tech_Girl7819 更新时间:11/17/2023 访问量:50
SQL 查询中的未来日期记录逻辑
Future dated record logic in SQL query
问:
我有一个包含步骤详细信息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'
))
)
目前,查询运行正常;但是,当 是将来的日期和今天的日期时,会出现一个问题。例如,如果 设置为 01-Dec-2023,而 是 16-Nov-2023,则查询不会捕获此方案。我想修改查询,以便如果查询是 01-Dec-2023,则查询在 01-Dec-2023 执行时返回输出。当前逻辑(其中 是今天的日期)阻止它在 2023 年 12 月 1 日被选中;相反,它会在当前日期被选中。
如何调整查询以解决此问题,并确保它在将来的方案中正常工作?grade_effective_start_date
max_update_date
grade_effective_start_date
max_update_date
grade_effective_start_date
max_update_date
答:
我认为您应该更改 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'
))
评论
当 是将来的日期和今天的日期时,会出现问题。
grade_effective_start_date
max_update_date
您似乎想为以下项添加过滤器:grade_effective_start_date <= SYSDATE AND grade_effective_end_date >= SYSDATE
SELECT *
FROM (
SELECT grade_step_name,
grade_code,
grade_sequence,
MAX(last_update_date) OVER (PARTITION BY grade_step_id)
AS 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 grade_effective_start_date <= SYSDATE
AND grade_effective_end_date >= SYSDATE
AND ( :attribute = 'N'
OR (
:attribute='Y'
AND max_update_date >= (
SELECT Max(processstart)
FROM fusion.ess_request_history erh
INNER JOIN fusion.ess_request_property erp
ON erh.requestid = erp.requestid
WHERE state = 12
AND erp.NAME = 'reportID'
)
)
)
您确定查询的最后一部分是正确的吗,因为外部查询和最终子查询之间没有关联,因此您正在查看是否有任何条目进入任何成绩的历史表,而不是检查是否有任何最近进入特定成绩的历史表?
评论
WHERE
OR