SQL 将具有开始和结束日期的条目合并到具有单一日期的条目

SQL merge entries with start and end dates to entries with single dates

我有两个 table,我们称它们为 A 和 B。Table A 有关于特定事件的数据,并且有一个唯一的键列对 event_dateperson. Table B 具有一段时间内的聚合数据,因此具有键列 start_dateend_dateperson。 table B 中的日期范围对于给定的人永远不会重叠,因此 end_date 对于复合键来说并不是绝对必要的。

下面是两个例子

SELECT event_date, person
FROM A
event_date person
2021-10-01 Alice
2021-10-01 Bob
2021-10-05 Bob
2021-11-05 Bob
SELECT start_date, end_date, person, attribute
FROM B
start_date end_date person attribute
2021-10-01 2021-11-01 Alice Attribute 1
2021-10-01 2021-11-01 Bob Attribute 1
2021-11-01 2021-12-01 Bob Attribute 2

我想把attribute列加到table A中,合并要考虑event_date列属于哪个日期范围,选择合适的属性。合并后的最终 table 应该是这样的:

event_date person attribute
2021-10-01 Alice Attribute 1
2021-10-01 Bob Attribute 1
2021-10-05 Bob Attribute 1
2021-11-05 Bob Attribute 2

如何解决这个问题?

您可以尝试在 BETWEEN 日期前 JOIN

SELECT a.*,b.attribute
FROM A a
JOIN B b
ON a.event_date BETWEEN b.start_date AND b.end_date
AND a.person = b.person