Раздел SQL достиг "second_value" и т. Д.

Я рассчитываю удержание клиентов и хочу сегментировать своих клиентов в соответствии с поведением в первой, второй, третьей и т. Д. Покупках.

Например:

using first_value(had_coupon) over (partition by customer_id order by order_date DESC) 

Я могу сегментировать с помощью купона при сохранении первого эффекта покупки.

Я пытаюсь сделать то же самое для второй и третьей покупки. Используя утверждение CASE, я могу дать другое значение клиентам, которые не покупали два, три или более раз.

Я использовал этот сайт для помощи.

1 ответ

Использование row_number() для маркировки первого, второго, третьего и т. д. + группы по агрегации с использованием max() или же min() сгруппировать строки по клиенту /etc:

select max(case when rn=1 then had_coupon end) first_order_had_coupon,
       max(case when rn=2 then had_coupon end) second_order_had_coupon, 
       -- and so on
       --other group columns
from  
(
select had_coupon,
       --other columns
      row_number() over (partition by customer_id order by order_date DESC) rn
  from table
)s
group by group columns
Другие вопросы по тегам