SQL - Как выбрать значение из разных строк на основе столбца - PullRequest
2 голосов
/ 20 марта 2020

Попытка найти изменения в заказе клиента на основе взаимодействия.
Заказы:

Customer_ID Start_dt    End_dt      Order_item
1           01/01/2020  14/01/2020  Apples
1           15/01/2020  01/02/2020  Bananas
1           02/02/2020  07/02/2020  Oranges
1           08/02/2020  Null        Grapes

Взаимодействия:

Customer_ID Interaction_Dt
1           02/02/2020

желаемый результат:

Customer_id Interaction_Dt  Order_Pre   Order_Post
1           02/02/2020      Bananas     Oranges

Я пытался использовать функцию CASE, но она только собирает Order_Post и дает мне ноль для Order_Pre

select interactions.customer_id, interactions.interaction_dt,
case when interactions.interaction_dt - orders.end_dt = 1 then orders.Order_item else 0 end as Order_pre,
case when orders.start_dt - interactions.interaction_dt = 1 then orders.order_item else 0 end as order_post
 from interactions
left join orders
on interactions.customer_id = orders.customer_id

Довольно плохо знаком с SQL, поэтому любая помощь будет принята с благодарностью.
Цель этого состоит в том, чтобы после взаимодействия клиента с нашим бизнесом увидеть, на что он изменил свой заказ. В реальных таблицах больше клиентов и взаимодействий, поэтому я пытаюсь создать сводку по всем датам взаимодействия клиентов, с которых они изменили свой заказ. Изменить: обновлены имена таблиц, чтобы сделать его более понятным, извините за путаницу

1 Ответ

2 голосов
/ 20 марта 2020

Я думаю, вы просто хотите join с lag():

select t2.*, t1.order_pre, t1.order as order_post
from table2 t2 join
     (select t1.*,
             lag(order) over (partition by customer_id order by start_dt) as order_pre
      from table1 t1
     ) t1
     on t2.custoemr_id = t1.customer_id and
        t2.Interaction_Dt >= t1.start_dt and
        t2.Interaction_Dt <= t1.end_dt;
...