История c Активных и истекающих клиентов по запросу активности заказа - PullRequest
0 голосов
/ 08 января 2020

Хорошо, у меня есть запрос, который просматривает таблицу заказов, с указанием order_date и customer_id среди других столбцов, находит последний заказ, сделанный каждым клиентом, а затем выплевывает количество активных клиентов (последний заказ в течение 60 дней), уходящие клиенты (последний заказ от 60 до 90 дней) и неактивные клиенты (последний заказ был более 90 дней go).

Критические столбцы в таблице заказов:

created_on | number | customer__id

Вот запрос и вывод соответственно:

with base as (
    select
        o.created_on,
        o.number,
        o.customer__id,
        o.total__amount,
        row_number() OVER (partition by o.customer__id order by o.created_on desc) as order_number
    from orders_received o
),

last_orders_list as (

    select 
        c.id as customer_id,
        current_date - b.created_on::date as days_since_last_order
        from base b
    left join customers c on b.customer__id = c.id
    where 
        True
        and order_number = 1
    order by
        b.created_on desc

)

select
    count(distinct customer_id) filter (where days_since_last_order > 90) as dormant,
    count(distinct customer_id) filter (where days_since_last_order <= 90 and days_since_last_order > 60) as slipping,
    count(distinct customer_id) filter (where days_since_last_order <= 60) as active
from last_orders_list

Вывод:

dormant | slipping | active

235    | 60       | 350

Я получил запрос на получение одинакового количества неактивных, проскальзывающих и активных исторически сложилось так, что клиенты за месяцем - но застряли.

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

year-month | dormant | slipping | active

2018-01    | 235     | 60       | 350
2018-02    | 242     | 32       | 370
2018-03    | 212     | 40       | 254
2018-04    | 223     | 63       | 335
...

Думаю, мне нужно использовать generate_series, чтобы сгенерировать год-месяц, который я хочу, а затем использовать оконную функцию, чтобы получить это число, но решение ускользает от меня. Любая помощь будет оценена!

...