I have data:
date_key customer_id product_variant_final frequency
2022-03-02 1 a 1
2022-04-01 2 b 2
2022-05-02 3 c 2
......
I want to simplified this query. The logic are:
- I want to know the frequency
- Select max when frequency 1 and 2, then get column
date_pertamaanddate_kedua - I want to know gap between
date_pertamaanddate_kedua. In there the name isselisih - Categorize
selisihbased on some condition
I try this query. But maybe it can be simplified.
SELECT customer_id,
product_variant_final,
date_pertama,
date_kedua,
selisih,
CASE WHEN selisih = 0 THEN "Same Day"
WHEN selisih BETWEEN -1 AND -7 THEN "1-7 Days"
WHEN selisih BETWEEN -8 AND -14 THEN "8-14 Days"
WHEN selisih BETWEEN -15 AND -21 THEN "15-21 Days"
WHEN selisih < -21 THEN "21+ Days"
END AS frequency_purchase
FROM(
SELECT customer_id,
product_variant_final,
date_pertama,
date_kedua,
DATE_DIFF(date_pertama, date_kedua, DAY) selisih
FROM(
SELECT customer_id,
product_variant_final,
MAX(CASE WHEN frequency=1 then date_key ELSE NULL END) date_pertama,
MAX(CASE WHEN frequency=2 then date_key ELSE NULL END) date_kedua
FROM(
SELECT date_key,
customer_id,
product_variant_final,
ROW_NUMBER() OVER(PARTITION BY customer_id, product_variant_final ORDER BY date_key) frequency
FROM final_data_variant
WHERE variant_type = "variant"
AND customer_id IN(SELECT customer_id FROM total_purchased_data WHERE total_purchased >= 2)
)
GROUP BY 1,2
))