Хорошо, у меня есть запрос, который просматривает таблицу заказов, с указанием 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, чтобы сгенерировать год-месяц, который я хочу, а затем использовать оконную функцию, чтобы получить это число, но решение ускользает от меня. Любая помощь будет оценена!