首页 > 解决方案 > 根据日期范围内是否(完全)包含年份进行匹配

问题描述

我正在尝试根据日期范围加入两个表。

表 A 格式为:

ID   CAT    DATE_START    DATE_END
1    10     2018-01-01    2020-12-31
2    15     2018-06-01    2018-07-01

表 B 格式为:

ID    YEAR       VALUE
1     2017       100
1     2018       110
1     2019       90
1     2020       30
2     2018       200

如果对于给定的 ID,B.YEAR 中的任何一天都包含在从 A.DATE_START 到 A.DATE_END 的日期范围内,则结果表应该被合并,并且应该如下所示:

ID    YEAR    CAT    VALUE
1     2018    10     110
1     2019    10     90
1     2020    10     30
2     2018    15     200

我尝试使用extract(year from DATE_START) and进行合并extract(year from DATE_START),但我无法在间隔中包含 2019 年中年,这意味着 ID = 1 缺少其 2019 年的值。

我也尝试使用 合并to_date(YEAR), 'YYYY'),但是 YEAR = '2018' 的生成日期是 '1.9.2018',它不属于 ID = 2 的间隔。非常感谢您的帮助。

标签: sqloracledatebetween

解决方案


像这样加入表格:

select a.ID, b.YEAR, a.CAT, b.VALUE 
from TableA a inner join TableB b
on b.ID = a.ID 
and b.year between extract(year from a.DATE_START) and extract(year from a.DATE_END)

请参阅演示
结果:

> ID | YEAR | CAT | VALUE
> -: | ---: | --: | ----:
>  1 | 2018 |  10 |   110
>  1 | 2019 |  10 |    90
>  1 | 2020 |  10 |    30
>  2 | 2018 |  15 |   200

推荐阅读