Advertisement
Guest User

Merge Monthly

a guest
Oct 15th, 2019
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 16.08 KB | None | 0 0
  1. WITH order_order AS (
  2.     SELECT *
  3.     FROM
  4.         (
  5.             SELECT f.*, ROW_NUMBER() OVER(partition BY id ORDER BY modified_at DESC) AS rn
  6.             FROM pathao_food.order_order AS f
  7.             WHERE modified_at >= '2019-01-01'
  8.         )
  9.     WHERE rn = 1
  10. ),
  11. restaurant_restaurant AS (
  12.     SELECT *
  13.     FROM
  14.         (
  15.             SELECT f.*, ROW_NUMBER() OVER(partition BY id ORDER BY modified_at DESC) AS rn
  16.             FROM pathao_food.restaurant_restaurant AS f
  17.             WHERE modified_at >= '2017-01-01'
  18.         )
  19.     WHERE rn = 1
  20. ),
  21.  
  22. order_orderevent AS (
  23.     SELECT *
  24.     FROM
  25.         (
  26.             SELECT f.*, ROW_NUMBER() OVER(partition BY id ORDER BY TIME DESC) AS rn
  27.             FROM pathao_food.order_orderevent AS f
  28.             WHERE TIME >= '2019-01-01'
  29.         )
  30.     WHERE rn = 1
  31. ),
  32. dump1 AS (
  33. SELECT a.*, b.assignment_
  34. FROM
  35.     (SELECT
  36.     EXTRACT(YEAR FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))event_year,
  37.     EXTRACT(MONTH FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))AS event_month,
  38.     COUNT(DISTINCT (CASE WHEN a.STATUS = 'DELIVERED' THEN a.restaurant_id END))active_restaurants,
  39.     COUNT(DISTINCT (CASE WHEN a.STATUS = 'DELIVERED' AND b.is_partner = TRUE THEN a.restaurant_id END))active_partner_restaurants,
  40.     COUNT(DISTINCT (a.tracking_id))total_request,
  41.     COUNT(DISTINCT (CASE WHEN c.STATUS = 'ACCEPTED' THEN c.order_id END))accepted_order,
  42.     COUNT(DISTINCT (CASE WHEN a.STATUS  = 'DELIVERED' THEN a.tracking_id END))delivered_order,
  43.     COUNT(DISTINCT (CASE WHEN a.STATUS  = 'DELIVERED' THEN a.tracking_id END))/COUNT(DISTINCT (CASE WHEN a.STATUS  = 'DELIVERED' THEN EXTRACT (HOUR FROM (timestamp_add(a.created_at, INTERVAL 6 HOUR)))END)) hourly_delivered_order,
  44.     COUNT(DISTINCT (CASE WHEN a.STATUS  = 'DELIVERED' AND promo_code IS NOT NULL THEN a.tracking_id END))delivered_promo_order,
  45.     COUNT(DISTINCT (CASE WHEN a.STATUS = 'DELIVERED' AND b.is_partner = TRUE THEN a.tracking_id END))partner_resto_order,
  46.     COUNT(DISTINCT (CASE WHEN a.STATUS  = 'CANCELED' THEN a.tracking_id END))cancelled_order,
  47.     COUNT(DISTINCT (CASE WHEN a.STATUS = 'CANCELED' AND b.is_partner = TRUE THEN a.tracking_id END))partner_resto_cancelled_order
  48.    
  49.     FROM order_order a, restaurant_restaurant b, order_orderevent c
  50.     WHERE a.restaurant_id = b.id AND CAST(a.id AS string) = CAST(c.order_id AS string) AND DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{ start_date}}' AND '{{ end_date }}' AND a.city = 1
  51.     GROUP BY 1,2)a
  52.    
  53. LEFT JOIN
  54.    
  55.     (SELECT EXTRACT(MONTH FROM a.event_time) AS event_month, COUNT(DISTINCT tracking_id)assignment_
  56.     FROM
  57.         (SELECT a.*
  58.         FROM
  59.                 (SELECT timestamp_add(a.created_at, INTERVAL 6 HOUR)event_time,tracking_id, driver
  60.                  
  61.                 FROM order_order a
  62.                 CROSS JOIN UNNEST(split(drivers_tried, ',') )  AS driver
  63.                 WHERE DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{ start_date}}' AND '{{ end_date }}' AND a.city = 1)a
  64.         WHERE driver <> '')a
  65.     GROUP BY 1)b
  66. ON a.event_month = b.event_month
  67. ORDER BY 1,2
  68. ),
  69. dump2 AS (
  70.     SELECT
  71. EXTRACT(YEAR FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))event_year,
  72. EXTRACT(MONTH FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR))) AS event_month,
  73. SUM(CASE WHEN delivery_fee = 0 THEN total_amount + estimated_delivery_fee ELSE total_amount END)/85 gmv_in_usd,
  74. (SUM(CASE WHEN delivery_fee = 0 THEN total_amount + estimated_delivery_fee ELSE total_amount END)/85)/COUNT(tracking_id) gmv_per_order_in_usd,
  75. SUM(CASE WHEN delivery_fee = 0 THEN promo_deductible_amount + estimated_delivery_fee ELSE promo_deductible_amount END)/85 total_burn_in_usd,
  76. SUM(CASE WHEN free_delivery = TRUE THEN estimated_delivery_fee END)/84.5 free_delivery_burn_usd,
  77. (SUM(CASE WHEN delivery_fee = 0 THEN promo_deductible_amount + estimated_delivery_fee ELSE promo_deductible_amount END)/85)/COUNT(tracking_id) burn_per_order_in_usd,
  78. (SUM(CASE WHEN delivery_fee = 0 THEN promo_deductible_amount + estimated_delivery_fee ELSE promo_deductible_amount END)*100/SUM(CASE WHEN delivery_fee = 0 THEN total_amount + estimated_delivery_fee ELSE total_amount END)) promo_prsnt_of_gmv
  79. FROM order_order a, restaurant_restaurant b
  80. WHERE STATUS = 'DELIVERED' AND a.restaurant_id = b.id AND DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{ start_date}}' AND '{{ end_date }}' AND a.city = 1
  81. GROUP BY 1,2
  82. ORDER BY 1,2
  83. ),
  84. dump3 AS (
  85.     SELECT a.*, b.user_first_trip, c.unserved_first_trip_user
  86.     FROM
  87.         (SELECT
  88.         EXTRACT(YEAR FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))event_year,
  89.         EXTRACT(MONTH FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR))) AS event_month,
  90.         --date(timestamp_add(a.created_at, interval 6 hour))event_date,
  91.         COUNT(DISTINCT a.USER) requesting_user,
  92.         COUNT(tracking_id)/COUNT(DISTINCT a.USER) request_per_user,
  93.         COUNT(DISTINCT (CASE WHEN STATUS = 'DELIVERED' THEN a.USER END)) served_user
  94.         FROM order_order a
  95.         WHERE DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{start_date}}' AND '{{end_date}}' AND a.city = 1
  96.         GROUP BY 1,2)a
  97.    
  98.     LEFT JOIN
  99.    
  100.         (SELECT EXTRACT(MONTH FROM a.ftd)  AS mon, COUNT(a.USER) user_first_trip  
  101.         FROM
  102.             (SELECT a.*
  103.             FROM order_order b,
  104.                 (SELECT a.USER, DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) ftd, RANK() OVER (PARTITION BY a.USER ORDER BY timestamp_add(a.created_at, INTERVAL 6 HOUR) ASC) AS rank, tracking_id
  105.                 FROM order_order a
  106.                 WHERE a.city = 1)a
  107.             WHERE a.tracking_id = b.tracking_id AND b.STATUS = 'DELIVERED' AND rank = 1)a
  108.         WHERE a.ftd BETWEEN '{{start_date}}' AND '{{end_date}}'
  109.         GROUP BY 1)b
  110.        
  111.     ON a.event_month = b.mon
  112.    
  113.    
  114.     LEFT JOIN
  115.    
  116.         (SELECT EXTRACT(MONTH FROM a.ftd)  AS moon, COUNT(a.USER) unserved_first_trip_user
  117.         FROM
  118.             (SELECT a.*
  119.             FROM order_order b,
  120.                 (SELECT a.USER, DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) ftd, RANK() OVER (PARTITION BY a.USER ORDER BY timestamp_add(a.created_at, INTERVAL 6 HOUR) ASC) AS rank, tracking_id
  121.                 FROM order_order a
  122.                 WHERE a.city = 1)a
  123.             WHERE a.tracking_id = b.tracking_id AND b.STATUS = 'CANCELED' AND rank = 1)a
  124.         WHERE a.ftd BETWEEN '{{start_date}}' AND '{{end_date}}'
  125.         GROUP BY 1)c
  126.        
  127.     ON a.event_month = c.moon
  128.     ORDER BY a.event_month
  129. ),
  130. dump4 AS (
  131.     SELECT a.*,b.assigned_driver
  132. FROM
  133.     (SELECT a.*, b.avg_delivered_time_in_min, b.avg_accepted_time_in_min
  134.     FROM
  135.         (SELECT
  136.         EXTRACT(YEAR FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))event_year,
  137.         EXTRACT(MONTH FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR))) AS event_month,
  138.         --date(timestamp_add(a.created_at, interval 6 hour))event_date,
  139.         COUNT(DISTINCT driver)total_driver,
  140.         COUNT(DISTINCT (CASE WHEN STATUS = 'DELIVERED' THEN driver END))active_driver
  141.         FROM order_order a
  142.         WHERE DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{start_date}}' AND '{{end_date}}' AND city = 1
  143.         GROUP BY 1,2)a
  144.        
  145.     RIGHT JOIN
  146.    
  147.        
  148.             (SELECT a.*, b.avg_accepted_time_in_min
  149.             FROM
  150.                 (SELECT a.event_month, (avg_delivered_time)/60 AS avg_delivered_time_in_min
  151.                 FROM
  152.                
  153.                     (SELECT EXTRACT (MONTH FROM a.event_date)  AS event_month, SUM(timestamp_diff(delivered_time, accepted_time,SECOND))/COUNT(tracking_id) avg_delivered_time  
  154.                     FROM
  155.                         (SELECT a.*, timestamp_add(c.TIME, INTERVAL 6 HOUR) accepted_time
  156.                         FROM order_orderevent c,
  157.                             (SELECT c.order_id,
  158.                             a.tracking_id,
  159.                             DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) event_date,
  160.                             timestamp_add(c.TIME, INTERVAL 6 HOUR) delivered_time
  161.                             FROM order_order a, order_orderevent c
  162.                             WHERE CAST(a.id AS string) = CAST(c.order_id AS string) AND c.STATUS = 'DELIVERED' AND a.city = 1
  163.                             )a
  164.                         WHERE a.order_id = c.order_id AND c.STATUS = 'ACCEPTED')a
  165.                     WHERE a.event_date BETWEEN '{{start_date}}' AND '{{end_date}}'
  166.                     GROUP BY 1)a
  167.             )a,
  168.                 (SELECT a.event_month, (avg_delivered_time)/60 AS avg_accepted_time_in_min
  169.                 FROM
  170.            
  171.                 (SELECT EXTRACT (MONTH FROM a.event_date) AS event_month, SUM(timestamp_diff(accepted_time,assigned_time,SECOND))/COUNT(tracking_id) avg_delivered_time  
  172.                 FROM
  173.                         (SELECT a.*, timestamp_add(c.TIME, INTERVAL 6 HOUR) assigned_time
  174.                         FROM order_orderevent c,
  175.                             (SELECT c.order_id,
  176.                             a.tracking_id,
  177.                             DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) event_date,
  178.                             timestamp_add(c.TIME, INTERVAL 6 HOUR) accepted_time
  179.                             FROM order_order a, order_orderevent c
  180.                             WHERE CAST(a.id AS string) = CAST(c.order_id AS string) AND c.STATUS = 'ACCEPTED' AND a.city = 1
  181.                             )a
  182.                         WHERE a.order_id = c.order_id AND c.STATUS = 'ASSIGNED')a
  183.                     WHERE a.event_date BETWEEN '{{start_date}}' AND '{{end_date}}'
  184.                     GROUP BY 1)a
  185.             )b
  186.             WHERE a.event_month = b.event_month)b
  187.            
  188.            
  189.            
  190.     ON a.event_month = b.event_month)a
  191.  
  192. RIGHT JOIN
  193.  
  194.      (SELECT EXTRACT(MONTH FROM a.event_date) AS event_month, COUNT(DISTINCT driver_id)assigned_driver
  195.         FROM
  196.             (SELECT a.*
  197.             FROM
  198.                     (SELECT DATE(timestamp_add(created_at, INTERVAL 6 HOUR))event_date,tracking_id, driver_id
  199.                     FROM order_order
  200.                     CROSS JOIN UNNEST(split(drivers_tried, ',')) AS driver_id
  201.                     WHERE DATE(timestamp_add(created_at, INTERVAL 6 HOUR)) BETWEEN '{{start_date}}' AND '{{end_date}}' AND city = 1)a
  202.             WHERE driver_id <> '')a
  203.         GROUP BY 1)b
  204. ON a.event_month = b.event_month
  205. ORDER BY 1,2
  206. ),
  207. dump5 AS (
  208.     SELECT a.*,c.avg_driver_being_tried_accepted_orders,b.avg_user_cancellation_time,b.avg_driver_Cancellation_time,b.avg_dispatch_time  
  209. FROM
  210.     (SELECT
  211.     EXTRACT(YEAR FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))event_year,
  212.     EXTRACT(MONTH FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)))event_month,
  213.     -- extract(week from date(timestamp_add(a.created_at, interval 6 hour)))+1 as event_week,
  214.     -- date(timestamp_add(a.created_at, interval 6 hour))event_date,
  215.     CAST(SUM(CASE WHEN STATUS = 'CANCELED' AND  a.driver = cancelled_by THEN 1 ELSE 0 END) AS NUMERIC)*100 / SUM(CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) Driver_Cancellation_prsnt ,
  216.     CAST(SUM(CASE WHEN STATUS = 'CANCELED' AND  cancelled_by=-1 AND drivers_tried IS NULL THEN 1 ELSE 0 END) AS NUMERIC)*100 / SUM(CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) No_driver_Available_Cancellation_prsnt,
  217.     CAST(SUM(CASE WHEN  STATUS = 'CANCELED' AND cancelled_by=-1 AND drivers_tried IS NOT NULL THEN 1 ELSE 0 END) AS NUMERIC)*100 / SUM(CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) No_driver_Accepted_Cancellation_prsnt,
  218.     CAST(SUM(CASE WHEN STATUS = 'CANCELED' AND cancelled_by = 0 OR cancelled_by IS NULL AND STATUS = 'CANCELLED' THEN 1 ELSE 0 END) AS NUMERIC)*100 / SUM(CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) ER_Cancellation_prsnt,
  219.     CAST(SUM(CASE WHEN  a.USER = cancelled_by THEN 1 ELSE 0 END) AS NUMERIC)*100 / SUM(CASE WHEN STATUS = 'CANCELED' THEN 1 ELSE 0 END) User_Cancellation_prsnt,
  220.     avg(CASE WHEN STATUS = 'DELIVERED' THEN (CHAR_LENGTH(drivers_tried) - CHAR_LENGTH(REPLACE(drivers_tried, ',', ''))) / CHAR_LENGTH(',') END) avg_drivers_being_tried_delivered_orders,
  221.     avg(CASE WHEN STATUS = 'CANCELED' THEN (CHAR_LENGTH(drivers_tried) - CHAR_LENGTH(REPLACE(drivers_tried, ',', ''))) / CHAR_LENGTH(',') END) avg_drivers_being_tried_cancelled_orders
  222.     FROM order_order  A
  223.     WHERE DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{start_date}}' AND '{{end_date}}'
  224.     AND A.city= 1
  225.     GROUP BY 1,2)a
  226.    
  227. LEFT JOIN
  228.  
  229.     (SELECT EXTRACT(MONTH FROM event_date) AS Months, avg(CASE WHEN cancellation_time>0 THEN cancellation_time ELSE NULL END)  avg_user_cancellation_time,avg(dispatch_time) avg_dispatch_time,avg(d_cancellation_time) avg_driver_Cancellation_time
  230.     FROM
  231.         (SELECT DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) event_date,b.*,
  232.         CASE WHEN b.STATUS = 'CANCELED' AND a.cancelled_by = a.USER  THEN timestamp_diff(b.TIME, a.created_at,SECOND) ELSE 0 END cancellation_time,
  233.         CASE WHEN b.STATUS = 'CANCELED' AND a.cancelled_by = a.driver  THEN timestamp_diff(b.TIME, a.created_at,SECOND) ELSE 0 END d_cancellation_time,
  234.         CASE WHEN b.STATUS = 'ACCEPTED' THEN timestamp_diff(b.TIME, a.created_at,SECOND) ELSE 0 END dispatch_time
  235.         FROM order_order a, order_orderevent b
  236.         WHERE  CAST(a.id AS string ) = CAST(b.order_id AS string)
  237.         AND b.STATUS IN ('CANCELED','ACCEPTED')
  238.         AND a.city= 1
  239.         AND DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{start_date}}' AND '{{end_date}}') a
  240.     GROUP BY 1)b
  241. ON a.event_month = b.Months
  242.  
  243. LEFT JOIN
  244.  
  245.     (SELECT  
  246. EXTRACT (MONTH FROM DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR))) AS event_month,
  247. avg((CHAR_LENGTH(drivers_tried) - CHAR_LENGTH(REPLACE(drivers_tried, ',', ''))) / CHAR_LENGTH(',')) avg_driver_being_tried_accepted_orders
  248. FROM order_order a
  249. WHERE drivers_tried IS NOT NULL
  250. AND DATE(timestamp_add(a.created_at, INTERVAL 6 HOUR)) BETWEEN '{{start_date}}' AND '{{end_date}}'
  251. GROUP BY 1)c
  252. ON a.event_month = c.event_month
  253. ORDER BY a.event_month
  254. ),
  255. dump6 AS (
  256.     SELECT event_month, SUM (driver_count) AS driver_count
  257. FROM
  258. (SELECT EXTRACT (MONTH FROM first_ride_date) AS event_month,a.*
  259. FROM
  260. (
  261.     SELECT first_ride_date,COUNT(*) driver_count
  262.     FROM
  263.     (
  264.         SELECT order_order.driver ,DATE(MIN(timestamp_add(created_at, INTERVAL 6 HOUR))) first_ride_date
  265.         FROM order_order
  266.         WHERE STATUS = 'DELIVERED'
  267.         AND city = 1
  268.         GROUP BY 1
  269.     ) A
  270.     GROUP BY 1
  271. ) A
  272. WHERE first_ride_date BETWEEN '{{start_date}}' AND '{{end_date}}'
  273.  
  274. ORDER BY 1)
  275. GROUP BY 1
  276. ORDER BY 1
  277. )
  278.  
  279.     SELECT
  280.         dump1.*,
  281.         dump2.gmv_in_usd ,
  282.         dump2.gmv_per_order_in_usd ,
  283.         dump2.total_burn_in_usd ,
  284.         dump2.free_delivery_burn_usd ,
  285.         dump2.burn_per_order_in_usd ,
  286.         dump2.promo_prsnt_of_gmv ,
  287.         dump3.requesting_user ,
  288.         dump3.request_per_user ,
  289.         dump3.served_user ,
  290.         dump3.user_first_trip ,
  291.         dump3.unserved_first_trip_user ,
  292.         dump4.total_driver ,
  293.         dump4.active_driver ,
  294.         dump4.avg_delivered_time_in_min ,
  295.         dump4.avg_accepted_time_in_min ,
  296.         dump4.assigned_driver ,
  297.         dump5.Driver_Cancellation_prsnt ,
  298.         dump5.No_driver_Available_Cancellation_prsnt ,
  299.         dump5.No_driver_Accepted_Cancellation_prsnt ,
  300.         dump5.ER_Cancellation_prsnt ,
  301.         dump5.User_Cancellation_prsnt ,
  302.         dump5.avg_drivers_being_tried_delivered_orders ,
  303.         dump5.avg_drivers_being_tried_cancelled_orders ,
  304.         dump5.avg_driver_being_tried_accepted_orders ,
  305.         dump5.avg_user_cancellation_time ,
  306.         dump5.avg_driver_Cancellation_time ,
  307.         dump5.avg_dispatch_time ,
  308.         dump6.driver_count
  309.     FROM dump1
  310.     JOIN dump2
  311.         ON dump2.event_month = dump1.event_month
  312.     JOIN dump3
  313.         ON dump3.event_month = dump1.event_month
  314.     JOIN dump4
  315.         ON dump4.event_month = dump1.event_month
  316.     JOIN dump5
  317.         ON dump5.event_month = dump1.event_month
  318.     JOIN dump6
  319.         ON dump6.event_month = dump1.event_month
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement