我有一个包含许可证记录的表。该表包含唯一的许可证号及其颁发日期。
License # Issue Date
1234 2018-FEB-01
5678 2016-MAR-15
9012 1991-JAN-22
3456 2005-SEP-25
我需要创建一个报告,计算自某个特定日期颁发许可证(四舍五入到最近的年份)以来每年的许可证有效期。在这种情况下,sysdate可以。
所以,我在找这样的东西:
License# Year License_Age
1234 2018 0
1234 2019 1
1234 2020 2
5678 2016 0
5678 2017 1
5678 2018 2
5678 2019 3
5678 2020 4
这将输入到更多的查询中,这些查询根据费用计划计算每年的费用。费用每增加5年左右,但如果我能弄清楚这一部分的螺母和螺栓的查询,我应该很好的休息。
这是我的基本语法。我现在可以得到许可证的当前年龄,但我真的不知道如何将自许可证颁发以来每年的年龄制成表格:
select floor(months_between(sysdate, a.issue_date) /12) as Years
from
myTable a
where
a.license_number = 1234 --using this specific license number to see if my result returns what I want
2条答案
按热度按时间wn9m85ua1#
您可以使用递归查询并添加12个月,然后使用
EXTRACT
要在结束时获取年份(不要在递归查询中仅使用年份,否则您将获得当前年份的行,其中开始日期将在当前日期之后):对于你的测试数据:
输出:
(注:第3456号许可证没有2020行,因为现在还不是9月。)
db<>在这里摆弄
i5desfxk2#
您可以对此使用递归查询:
对于示例数据的前两行,此查询将生成: