У меня две таблицы:
Таблица 1, содержащая телефонные звонки (на каждый CustomerID
приходится не более одного телефонного звонка в день):
ActicityID CustomerID PhoneDate
1 A 2019-11-01
2 A 2019-12-01
3 A 2019-12-20
4 B 2019-11-01
5 B 2019-11-20
6 C 2019-11-03
7 D 2019-11-03
8 D 2019-12-01
9 E 2019-11-05
10 F 2019-11-01
Таблица 2, которая содержит заказы (OrdDate
- это дата размещения заказа, а BillingDate
- дата, когда заказ был списан)
CustomerID OrdDate BillingDate
A 2019-12-03 2019-12-04
A 2019-12-21 2019-12-21
B 2019-11-03 2019-11-10
D 2019-12-02 2019-12-02
F 2019-11-02 2019-11-02
Я хочу присоединиться к столам. В объединенной таблице должно быть такое же количество строк, что и в таблице 1. Итак, в основном я хочу знать, был ли заказ после телефонного звонка. Проблема в том, что если просто присоединиться к CustomerID
, я получу OrdDat
и BillingDate
за каждого клиента, который когда-либо делал заказ. Например, клиент A сделал заказ после звонка 01.12.2019 и после звонка 20.12.2019, но не после первого звонка.
Итак, мой желаемый результат был бы
ActicityID CustomerID PhoneDate OrdDate BillingDate
1 A 2019-11-01 NULL NULL
2 A 2019-12-01 2019-12-03 2019-12-04
3 A 2019-12-20 2019-12-21 2019-12-21
4 B 2019-11-01 2019-11-03 2019-11-10
5 B 2019-11-20 NULL NULL
6 C 2019-11-03 NULL NULL
7 D 2019-11-03 NULL NULL
8 D 2019-12-01 2019-12-02 2019-12-02
9 E 2019-11-05 NULL NULL
10 F 2019-11-01 2019-11-02 2019-11-02
Я думаю, мне нужно присоединиться к CustomerID и ближайшей дате между PhoneDate и OrdDate, но мои знания SQL довольно ограничены, и я не мог понять, как это сделать.