Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. WITH days_array AS
  2. (
  3. SELECT
  4. GENERATE_DATE_ARRAY('2019-11-01', '2019-12-15', INTERVAL 1 DAY) AS days
  5. ),
  6. days AS
  7. (
  8. SELECT day FROM days_array,
  9. UNNEST(days) as day
  10. ),
  11.  
  12. shipments_statuses AS
  13. (
  14. SELECT
  15. id, shipment_id, user_id, type, created_at
  16. ,SAFE_CAST(REGEXP_EXTRACT(JSON_EXTRACT(data, '$.status_id'), r'[\d]+') AS INT64) AS status_id
  17. FROM `bigdata-awok.als_awok_logistics_rt.aw_shipment_history_log`
  18. WHERE (EXTRACT(DATE FROM created_at) >= DATE("2019-11-01")
  19. AND type = "status_change")
  20. ),
  21. shipment_history AS
  22. (
  23. SELECT *, EXTRACT(DATE FROM created_at) AS created_at_date FROM shipments_statuses
  24. ),
  25. shipments_statuses_per_days AS
  26. (
  27. SELECT shipment_history.shipment_id, shipment_history.status_id, shipment_history.created_at_date
  28. FROM shipment_history JOIN (
  29. SELECT shipment_id, created_at_date, MAX(created_at) AS maximum_timestamp_per_day
  30. FROM shipment_history
  31. GROUP BY shipment_id, created_at_date
  32. ) AS nested
  33. ON shipment_history.shipment_id = nested.shipment_id
  34. AND shipment_history.created_at_date = nested.created_at_date
  35. AND shipment_history.created_at = nested.maximum_timestamp_per_day
  36. )
  37. ,
  38. shipments_statuses_per_days_and_per_statuses AS
  39. (
  40. SELECT
  41. created_at_date
  42. ,COUNT(status_4) AS status_4
  43. ,COUNT(status_5) AS status_5
  44. ,COUNT(status_6) AS status_6
  45. ,COUNT(status_18) AS status_18
  46. ,COUNT(status_19) AS status_19
  47. ,COUNT(status_136) AS status_136
  48. FROM (
  49. SELECT
  50. shipment_id
  51. ,created_at_date
  52. ,CASE WHEN status_id = 4
  53. THEN status_id
  54. END AS status_4
  55. ,CASE WHEN status_id = 5
  56. THEN status_id
  57. END AS status_5
  58. ,CASE WHEN status_id = 6
  59. THEN status_id
  60. END AS status_6
  61. ,CASE WHEN status_id = 18
  62. THEN status_id
  63. END AS status_18
  64. ,CASE WHEN status_id = 19
  65. THEN status_id
  66. END AS status_19
  67. ,CASE WHEN status_id = 136
  68. THEN status_id
  69. END AS status_136
  70. FROM
  71. shipments_statuses_per_days)
  72. GROUP BY created_at_date
  73. )
  74. SELECT day, status_4, status_5, status_6, status_18, status_19, status_136
  75. FROM days
  76. LEFT JOIN shipments_statuses_per_days_and_per_statuses
  77. ON days.day = shipments_statuses_per_days_and_per_statuses.created_at_date
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement