Запросы к нормализованной таблице с несколькими строками (воронка продаж) событий для каждого клиента - PullRequest
0 голосов
/ 26 мая 2020

У меня есть набор данных воронки продаж, и каждая строка представляет собой движение по воронке. Поскольку существует довольно много способов, которыми потенциальный клиент может перемещаться по воронке (и go назад), я не планировал выравнивать / денормализовать таблицу. Как я могу, например, подсчитать, «сколько клиентов ушли и повторно активировали»?

customer | opp_id | status_old | status_new | current_opp_status | status_change_date
cust_8   | 22     | confirmed  | paying     | paying             | 2020-01-01
cust_9   | 23     | confirmed  | paying     | churned            | 2020-01-03
cust_9   | 23     | paying     | churned    | churned            | 2020-01-08
cust_12  | 24     | confirmed  | paying     | churned            | 2020-01-01
cust_12  | 24     | paying     | churned    | churned            | 2020-03-21
cust_12  | 28     | confirmed  | paying     | paying             | 2020-04-03
cust_13  | 30     | confirmed  | paying     | paying             | 2020-02-03
...      | ...    | ...        | ...        | ...                | ...

В приведенном выше случае я хотел бы по существу идентифицировать cust_12 , когда они ушли, но затем вернулся как платящий клиент с новым идентификатором возможности, но я даже не могу решить, с чего начать. Есть предложения?

1 Ответ

1 голос
/ 26 мая 2020

Думаю, вы можете использовать агрегирование:

select customer
from t
group by customer
having min(case when status_new = 'churned' then status_change_date end) <
       max(case when status_new = 'paying' then status_change_date end);

На самом деле, с учетом ваших данных, простого where может быть достаточно:

select t. * From t where status_new = ' платит 'и status_old =' churned '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...