Запрос PostgreSQL для подсчета новых клиентов, сгруппированных по продуктам и сегментам - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть таблица данных для выставления счетов, которая выглядит следующим образом:

+-----------------------+------------+------------+-------------+---------+
|      segment          |  Product   |  custname  | prod_yr_mth | revenue |
+-----------------------+------------+------------+-------------+---------+
| PUBLIC SECTOR         | product 1  | customer a |      201806 | 318.34  |
| LARGE ENTERPRISE      | product 2  | customer b |      201902 | 8.96    |
| SMALL MEDIUM BUSINESS | product 3  | customer c |      201907 | -10     |
| SMALL MEDIUM BUSINESS | product 4  | customer d |      201804 | 0       |
| SMALL MEDIUM BUSINESS | product 5  | customer e |      201809 | 9.33    |
| LARGE ENTERPRISE      | product 1  | customer f |      201901 | 155.75  |
| PUBLIC SECTOR         | product 6  | customer g |      201905 | 24.32   |
| SMALL MEDIUM BUSINESS | product 2  | customer h |      201812 | 0.25    |
| SMALL MEDIUM BUSINESS | product 2  | customer i |      201801 | 5.46    |
| LARGE ENTERPRISE      | product 7  | customer j |      201805 | 4.5     |
| LARGE ENTERPRISE      | product 1  | customer k |      201812 | 0       |
| SMALL MEDIUM BUSINESS | product 8  | customer l |      201809 | 2.99    |
| LARGE ENTERPRISE      | product 2  | customer m |      201812 | 0.71    |
| LARGE ENTERPRISE      | product 1  | customer n |      201902 | 0       |
| PUBLIC SECTOR         | product 2  | customer o |      201803 | 1.08    |
| SMALL MEDIUM BUSINESS | product 9  | customer p |      201802 | 10.27   |
| LARGE ENTERPRISE      | product 10 | customer a |      201905 | 52.99   |
| PUBLIC SECTOR         | product 1  | customer b |      201810 | 7       |
| SMALL MEDIUM BUSINESS | product 3  | customer c |      201906 | 40      |
+-----------------------+------------+------------+-------------+---------+

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

Итакв этом месяце максимальная дата в столбце prod_yr_mth - 201908. Я бы посчитал, что покупатель "чистый новый", если самое раннее значение для этого покупателя, покупающего этот товар, - 201908.

Конечный результат должен выглядеть следующим образом:

+-----------------------+------------+-------------------+
|      segment          |  Product   | Net_New_Customers |
+-----------------------+------------+-------------------+
| LARGE ENTERPRISE      | product 1  |                 0 |
| LARGE ENTERPRISE      | product 10 |                 5 |
| LARGE ENTERPRISE      | product 2  |                 6 |
| LARGE ENTERPRISE      | product 6  |                 1 |
| LARGE ENTERPRISE      | product 7  |                 2 |
| PUBLIC SECTOR         | product 1  |                 3 |
| PUBLIC SECTOR         | product 2  |                 1 |
| PUBLIC SECTOR         | product 5  |                 1 |
| PUBLIC SECTOR         | product 6  |                 1 |
| SMALL MEDIUM BUSINESS | product 1  |                 1 |
| SMALL MEDIUM BUSINESS | product 2  |                 0 |
| SMALL MEDIUM BUSINESS | product 3  |                 9 |
| SMALL MEDIUM BUSINESS | product 4  |                 8 |
| SMALL MEDIUM BUSINESS | product 5  |                 7 |
| SMALL MEDIUM BUSINESS | product 6  |                 3 |
| SMALL MEDIUM BUSINESS | product 8  |                 4 |
| SMALL MEDIUM BUSINESS | product 9  |                 5 |
| SMALL MEDIUM BUSINESS | product 10 |                 2 |
+-----------------------+------------+-------------------+

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2019

Если я правильно понимаю, вы хотите сравнить самую раннюю дату для покупателя / продукта с самой последней датой в таблице.Если так:

select seg_lvl5_2, Product,
       count(*) filter (where max_yyyymm = min_cp_yyyymm) as num_net_new
from (select t.*, 
             max(prod_yr_mth) over () as max_yyyymm,
             min(prod_yr_mth) over (partition by custname, product) as min_cp_yyyymm
      from t
     ) t
group by seg_lvl5_2, Product;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...