I have two tables, lets call them A and B. Table A has data regarding specific events and has a unique key column pairing of event_date
and person
. Table B has aggregate data over time and thus has key columns start_date
,end_date
and person
. The date ranges in table B will never overlap for a given person so end_date
is not strictly necessary for the composite key.
Below are two examples
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 |
I would like to add the attribute
column to table A. The merger should consider in which date range the event_date
column falls into and choose the appropriate attribute. The final table after the merge should look like this:
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 |
How would one go about solving this?
Advertisement
Answer
You can try to JOIN
by BETWEEN
dates.
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