Построение когортного анализа - не хватает данных за последние месяцы - PullRequest
0 голосов
/ 10 апреля 2019

Я построил когортный анализ для долгосрочного значения, и он, кажется, работает - числа всплывают =).Но я не могу понять, почему нет цифр за последний месяц для определенных строк?

И это самый простой способ для меня создать когорту?Рад получить предложения по улучшению.

select

  ltv.activation_month as 'Cohort Activation Month', COUNT(*) as 'Cohort Size',
  AVG(ltv.one_month_GP) as '1 Month GP',
  AVG(ltv.two_month_GP) as '2 Month GP',
  AVG(ltv.three_month_GP) as '3 Month GP',
  AVG(ltv.four_month_GP) as '4 Month GP',
  AVG(ltv.five_month_GP) as '5 Month GP',
  AVG(ltv.six_month_GP) as '6 Month GP',
  AVG(ltv.seven_month_GP) as '7 Month GP',
  AVG(ltv.eight_month_GP) as '8 Month GP',
  AVG(ltv.nine_month_GP) as '9 Month GP',
  AVG(ltv.ten_month_GP) as '10 Month GP',
  AVG(ltv.eleven_month_GP) as '11 Month GP',
  AVG(ltv.twelve_month_GP) as '12 Month GP'

FROM

  (select
    u.user_acc, LEFT(activation_date,7) as activation_month, u.activation_date,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 1 MONTH) and DATE_ADD(u.activation_date, INTERVAL 1 MONTH) <= {{date}} then p.GP else null end) as one_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 2 MONTH) and DATE_ADD(u.activation_date, INTERVAL 2 MONTH) <= {{date}}then p.GP else null end) as two_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 3 MONTH) and DATE_ADD(u.activation_date, INTERVAL 3 MONTH) <= {{date}} then p.GP else null end) as three_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 4 MONTH) and DATE_ADD(u.activation_date, INTERVAL 4 MONTH) <= {{date}} then p.GP else null end) as four_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 5 MONTH) and DATE_ADD(u.activation_date, INTERVAL 5 MONTH) <= {{date}} then p.GP else null end) as five_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 6 MONTH) and DATE_ADD(u.activation_date, INTERVAL 6 MONTH) <= {{date}} then p.GP else null end) as six_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 7 MONTH) and DATE_ADD(u.activation_date, INTERVAL 7 MONTH) <= {{date}} then p.GP else null end) as seven_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 8 MONTH) and DATE_ADD(u.activation_date, INTERVAL 8 MONTH) <= {{date}} then p.GP else null end) as eight_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 9 MONTH) and DATE_ADD(u.activation_date, INTERVAL 9 MONTH) <= {{date}} then p.GP else null end) as nine_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 10 MONTH) and DATE_ADD(u.activation_date, INTERVAL 10 MONTH) <= {{date}} then p.GP else null end) as ten_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 11 MONTH) and DATE_ADD(u.activation_date, INTERVAL 11 MONTH) <= {{date}} then p.GP else null end) as eleven_month_GP,
    SUM(case when p.success_date <= DATE_ADD(u.activation_date, INTERVAL 12 MONTH) and DATE_ADD(u.activation_date, INTERVAL 12 MONTH) <= {{date}} then p.GP else null end) as twelve_month_GP

FROM

   (select user_id as user_acc, min(created_at) as activation_date
     from payments
     where user_type = 1
     group by user_id) u

  left join payments p on u.user_acc = p.user_id
   where
    u.activation_date >= '2017-10-01'
    and p.status not like "%cancelled%"
   group by
    1) ltv
group by
  1

Пропущенные цифры за последний месяц, если {{date}} = '2019-03-31' Я не получу никакой суммы за March 2019, только подсчет когорт.

...