根据日期范围内是否(完全)包含年份进行匹配
Matching based on whether year is included (at all) in date range
我正在尝试根据日期范围加入两个 table。
Table 格式为:
ID CAT DATE_START DATE_END
1 10 2018-01-01 2020-12-31
2 15 2018-06-01 2018-07-01
Table 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 的日期范围内,则应合并结果 table,应该是这样的:
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)
和 extract(year from DATE_START)
合并,但我无法将 2019 年中年包含在间隔中,这意味着 ID = 1 缺少其 2019 年的值。
我也尝试过使用to_date(YEAR), 'YYYY')
合并,但是YEAR ='2018'的生成日期是'1.9.2018',不在ID = 2的时间间隔内。非常感谢您的帮助.
首先:我使用 Microsoft SQL 服务器,如果这在 Oracle 中不起作用,我们深表歉意。
SELECT * FROM TableA
INNER JOIN TableB ON TableA.Id = TableB.Id AND TableB.Year BETWEEN YEAR(TableA.Date_Start) AND YEAR(TableA.Date_End)
像这样加入表格:
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)
参见demo。
结果:
> ID | YEAR | CAT | VALUE
> -: | ---: | --: | ----:
> 1 | 2018 | 10 | 110
> 1 | 2019 | 10 | 90
> 1 | 2020 | 10 | 30
> 2 | 2018 | 15 | 200
我正在尝试根据日期范围加入两个 table。
Table 格式为:
ID CAT DATE_START DATE_END
1 10 2018-01-01 2020-12-31
2 15 2018-06-01 2018-07-01
Table 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 的日期范围内,则应合并结果 table,应该是这样的:
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)
和 extract(year from DATE_START)
合并,但我无法将 2019 年中年包含在间隔中,这意味着 ID = 1 缺少其 2019 年的值。
我也尝试过使用to_date(YEAR), 'YYYY')
合并,但是YEAR ='2018'的生成日期是'1.9.2018',不在ID = 2的时间间隔内。非常感谢您的帮助.
首先:我使用 Microsoft SQL 服务器,如果这在 Oracle 中不起作用,我们深表歉意。
SELECT * FROM TableA
INNER JOIN TableB ON TableA.Id = TableB.Id AND TableB.Year BETWEEN YEAR(TableA.Date_Start) AND YEAR(TableA.Date_End)
像这样加入表格:
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)
参见demo。
结果:
> ID | YEAR | CAT | VALUE
> -: | ---: | --: | ----:
> 1 | 2018 | 10 | 110
> 1 | 2019 | 10 | 90
> 1 | 2020 | 10 | 30
> 2 | 2018 | 15 | 200