如何解决如果输入日期不可用,如何在oracle中获取开始日期和结束日期之间的输入日期,然后返回最大日期记录
请找到随附的样本数据。 方案1:如果我提供的输入日期为“ 21-aug-20”,并且满足两个aggrement_id,那么我希望采用有效记录上的最大记录。即 abcd 。 方案2:如果我提供的日期为'26 -aug-20',并且在任何行中都不满足,则它应返回最大有效结束日期记录。即 abce 。
解决方法
我获取了相同的数据,并从中创建了一个表demo
。参见dbfiddle
您可以尝试以下查询
WITH data AS
(SELECT DATE '2020-08-14' input FROM dual) --input parameter
SELECT arng_id,st_dt,end_dt
FROM (SELECT input,demo.*,MAX(end_dt) over(ORDER BY NULL) max_dt --taken max(end_dt) to match in case no result with input parameter
FROM demo,data)
WHERE (input BETWEEN st_dt AND end_dt) -- matches with input paramater OR
OR (max_dt BETWEEN end_dt AND input) -- condition when no result with first match
ORDER BY end_dt DESC -- order by require to fetch the max record always
FETCH FIRST 1 ROW ONLY --oracle 12c feature
有了11g,我们可以使用ROWNUM
。参见dbfiddle
注意:我没有考虑提供的输入小于max(end_dt)并且与任何行都不匹配的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。