0

我正在使用 bigquery#standardsql处理表。该表将记录在第 9 个月和第 10 个月购买东西的用户的转换 (1)。对于在第 10 个月没有购买的用户,0他们的行中只有

到目前为止,这是查询custom_coded

(case when row_number() 
  over (partition by customer_id order by purchase_date asc) =
                  count(*) over (partition by customer_id)
             then 1 else 0 END) AS custom_coded

这是迄今为止的结果 结果

我所期望的是,因为他在下个月或第 10 个月没有购买,所以customer_id = 288只有0在他有购买记录的情况下才会有custom_codedcustomer_id = 8791purchase_date

这是预期的结果 预期结果

我之前在这个线程中问过(解码 sql 的最大行数),但是数据集不满足我将要执行的分析的想法

4

1 回答 1

1

以下是 BigQuery 标准 SQL

#standardSQL
SELECT customer_id, item_purchased, purchase_date, 
  (CASE WHEN 
    ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date ASC) =
        COUNT(*) OVER (PARTITION BY customer_id)
    AND SUM(DISTINCT (CASE FORMAT_DATE('%Y%m', purchase_date) 
        WHEN '201709' THEN 1 WHEN '201710' THEN 2 ELSE 0 END)) 
        OVER(PARTITION BY customer_id) = 3
    THEN 1 ELSE 0 
  END) AS custom_coded
FROM `project.dataset.table`

您可以使用问题中的虚拟数据测试/玩上面的内容

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 288 customer_id, 'Rice' item_purchased, DATE '2017-09-02' purchase_date UNION ALL
  SELECT 288, 'Rice', DATE '2017-09-02' UNION ALL
  SELECT 288, 'Rice', DATE '2017-09-06' UNION ALL
  SELECT 879, 'Plate', DATE '2017-09-01' UNION ALL
  SELECT 879, 'Plate', DATE '2017-09-25' UNION ALL
  SELECT 879, 'Plate', DATE '2017-10-25' UNION ALL
  SELECT 879, 'Plate', DATE '2017-10-27' 
)
SELECT customer_id, item_purchased, purchase_date, 
  (CASE WHEN 
    ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_date ASC) =
        COUNT(*) OVER (PARTITION BY customer_id)
    AND SUM(DISTINCT (CASE FORMAT_DATE('%Y%m', purchase_date) 
        WHEN '201709' THEN 1 WHEN '201710' THEN 2 ELSE 0 END)) 
        OVER(PARTITION BY customer_id) = 3
    THEN 1 ELSE 0 
  END) AS custom_coded
FROM `project.dataset.table`
ORDER BY customer_id, purchase_date   

结果是

customer_id item_purchased  purchase_date   custom_coded     
288         Rice            2017-09-02      0    
288         Rice            2017-09-02      0    
288         Rice            2017-09-06      0    
879         Plate           2017-09-01      0    
879         Plate           2017-09-25      0    
879         Plate           2017-10-25      0    
879         Plate           2017-10-27      1    
于 2017-12-04T17:06:55.803 回答