Определить нового продавца (без покупки за последние 3 месяца) - PullRequest
1 голос
/ 08 апреля 2020

В моем SQL - BigQuery, у меня есть таблица с 3 столбцами: месяц, дата, ID о записях транзакций пользователей. Вот пример Я хочу определить, какой ID является новым продавцом в каждом месяце, определение нового продавца - это продавец, не покупая последние 3 месяца.

Я пытался отсортировать row_number по порядку номеров идентификаторов, идентификаторов Я считаю, что row_number не в (2,3,4) является новым продавцом. Тем не менее, ID может пропустить 1 месяц и повторно купить в следующем месяце, мой код не работает в этой ситуации.

Не могли бы вы помочь мне решить эту проблему? Большое спасибо.

1 Ответ

1 голос
/ 08 апреля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT *, 
  COUNT(1) OVER(
    PARTITION BY id 
    ORDER BY DATE_DIFF(`date`, '2000-01-01', MONTH) 
    RANGE BETWEEN 4 PRECEDING AND 1 PRECEDING
  ) = 0 AS new_seller
FROM `project.dataset.table`

Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Mar-19' month, DATE '2019-03-01' `date`, 1 id UNION ALL
  SELECT 'Mar-19', '2019-03-03', 2 UNION ALL
  SELECT 'Mar-19', '2019-03-04', 3 UNION ALL
  SELECT 'Apr-19', '2019-04-05', 3 UNION ALL
  SELECT 'Apr-19', '2019-04-06', 4 UNION ALL
  SELECT 'Apr-19', '2019-04-07', 5 UNION ALL
  SELECT 'May-19', '2019-05-03', 3 UNION ALL
  SELECT 'May-19', '2019-05-04', 6 UNION ALL
  SELECT 'May-19', '2019-05-05', 5 UNION ALL
  SELECT 'Jun-19', '2019-06-06', 1 UNION ALL
  SELECT 'Jun-19', '2019-06-07', 7 UNION ALL
  SELECT 'Jun-19', '2019-06-08', 8 UNION ALL
  SELECT 'Jun-19', '2019-06-09', 9 UNION ALL
  SELECT 'Jul-19', '2019-07-05', 2 UNION ALL
  SELECT 'Jul-19', '2019-07-06', 5 UNION ALL
  SELECT 'Jul-19', '2019-07-07', 9 
)
SELECT *, 
  COUNT(1) OVER(
    PARTITION BY id 
    ORDER BY DATE_DIFF(`date`, '2000-01-01', MONTH) 
    RANGE BETWEEN 4 PRECEDING AND 1 PRECEDING
  ) = 0 AS new_seller
FROM `project.dataset.table`
-- ORDER BY `date`

с выводом ниже

Row month   date        id  new_seller   
1   Mar-19  2019-03-01  1   true     
2   Mar-19  2019-03-03  2   true     
3   Mar-19  2019-03-04  3   true     
4   Apr-19  2019-04-05  3   false    
5   Apr-19  2019-04-06  4   true     
6   Apr-19  2019-04-07  5   true     
7   May-19  2019-05-03  3   false    
8   May-19  2019-05-04  6   true     
9   May-19  2019-05-05  5   false    
10  Jun-19  2019-06-06  1   false    
11  Jun-19  2019-06-07  7   true     
12  Jun-19  2019-06-08  8   true     
13  Jun-19  2019-06-09  9   true     
14  Jul-19  2019-07-05  2   false    
15  Jul-19  2019-07-06  5   false    
16  Jul-19  2019-07-07  9   false    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...