确定新卖家(最近3个月内没有购买)

问题描述 投票:1回答:1

在我的SQL-BigQuery中,我有一个包含3列的表:月,日期,有关用户交易记录的ID。Here is the example我想确定每个月哪个ID是新卖家,新卖家的定义是最近3个月内没有购买的卖家。

我试图按日期ID对row_number进行排序。我认为不在(2,3,4)中的row_number是新卖方。但是,ID可以跳过1个月并在下个月重新购买,我的代码不适用于这种情况。

您能帮我解决这个问题吗?非常感谢。

google-bigquery
1个回答
1
投票

下面是BigQuery标准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    
© www.soinside.com 2019 - 2024. All rights reserved.