在我的SQL-BigQuery中,我有一个包含3列的表:月,日期,有关用户交易记录的ID。Here is the example我想确定每个月哪个ID是新卖家,新卖家的定义是最近3个月内没有购买的卖家。
我试图按日期ID对row_number进行排序。我认为不在(2,3,4)中的row_number是新卖方。但是,ID可以跳过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