Advertisement
Guest User

Untitled

a guest
May 25th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.41 KB | None | 0 0
  1. SELECT
  2. EXTRACT(YEAR FROM t3.t2date) AS YEAR,
  3. EXTRACT(MONTH FROM t3.t2date) AS MONTH,
  4. t3.user_type,
  5. COUNT(DISTINCT t3.buyer_id) AS total_users,
  6. COUNT(DISTINCT t3.order_id) AS total_orders,
  7. SUM(t3.total) AS total_gmv
  8. FROM
  9. (WITH t1 AS
  10. (SELECT
  11. DISTINCT
  12. DATE(payed_at) AS t1date,
  13. buyer_id
  14. FROM shared.orders),
  15.  
  16.  t2 AS
  17. (SELECT
  18. t1.buyer_id,
  19. t1.t1date AS t2date,
  20. countif(DATE(payed_at) BETWEEN DATE_ADD(t1.t1date, INTERVAL -60 DAY) AND DATE_ADD(t1.t1date, INTERVAL -31 DAY)  ) AS prev_order,
  21. countif(DATE(payed_at) BETWEEN DATE_ADD(t1.t1date, INTERVAL -30 DAY) AND DATE_ADD(t1.t1date, INTERVAL -1 DAY)  ) AS current_order
  22. FROM shared.orders
  23. JOIN t1 ON t1.buyer_id=orders.buyer_id
  24. GROUP BY 1,2)
  25.  
  26.  
  27. SELECT
  28. t1.buyer_id,
  29. order_id,
  30. t1.t1date ,
  31. t2.t2date ,
  32.  
  33. DATE(first_order_at) AS first_order,
  34. t2.current_order,
  35. t2.prev_order,
  36.  
  37.  
  38. CASE WHEN t1.t1date BETWEEN DATE(first_order_at) AND DATE_ADD(DATE(first_order_at), INTERVAL 29 DAY) THEN 'new'
  39. WHEN t1.t1date>DATE_ADD(DATE(first_order_at), INTERVAL 29 DAY) AND t2.prev_order>0 THEN 'existing'
  40. WHEN t1.t1date>DATE_ADD(DATE(first_order_at), INTERVAL 29 DAY) AND t2.prev_order=0 THEN 'reactivated'
  41. ELSE 'wtf' END AS user_type,
  42. total
  43.  
  44.  
  45. FROM shared.orders
  46. JOIN t1 ON t1.buyer_id=orders.buyer_id AND t1.t1date=DATE(orders.payed_at)
  47. JOIN t2 ON t2.buyer_id=orders.buyer_id AND t2.t2date=DATE(orders.payed_at)
  48. ORDER BY 1,2,3) AS t3
  49. GROUP BY 1,2,3
  50. ORDER BY 1,2,3,4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement