を実行するつもり分析のためのアイデアは、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`
のためであります3210
あなたがテストすることができます/
#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
あなたはどんな年に9月か10月をしたい、またはちょうど2017かは、あなたの質問からダミーデータを使用して、上記と遊びますか? –
こんにちは@TimBiegeleisen、それは2017です。顧客は 'custom_coded'カラムに' 1'表記を得るために2ヶ月連続で購入する必要があります。 私は実際に試してみて、この1つは '' '(ケース時)PURCHASE_DATEのASCによってCUSTOMER_ID順序によって、パーティション(オーバーROW_NUMBER() = COUNT(*)を超える(CUSTOMER_IDによってパーティション) とPURCHASE_DATE <「2017から10です-01 ' then 1 else 0 END)AS custom_coded'''' – user3292755
@TimBiegeleisenしかし、そのクエリは正しくありませんでした。なぜなら、ユーザが月9日に1回だけ購入すれば、彼は自然に「1」としてコード化されるからである。 '0'にする必要がある場所 – user3292755