Advertisement
ahmedrahil786

Hourly Socar Funnel - Shanyi

Oct 15th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. set @start := CAST((now() - interval 7 day) AS DATE);
  2.  
  3. select
  4. A.date AS date,
  5. A.hour AS hours,
  6. IFNULL(G.Active_installs_2019,0) as Installs,
  7. A.signups AS SignUps,
  8. CAST((A.signups/IFNULL(G.Active_installs_2019,0)) AS DECIMAL(18,2)) as "SignUps/Installs",
  9. B.DocUploaded AS DocUpload,
  10. CAST((B.DocUploaded/A.signups) AS DECIMAL(18,2)) as "DocUpload/SignUps",
  11. B.DocApproved,
  12. CAST((B.DocApproved/B.DocUploaded) AS DECIMAL(18,2)) as "DocApproved/DocUpload",
  13. F.cardupload as PaymentApproved,
  14. CAST((F.cardupload/B.DocApproved) AS DECIMAL(18,2)) as "PaymentApproved/DocApproved",
  15. D.TotalMFTs,
  16. CAST((D.TotalMFTs/F.cardupload) AS DECIMAL(18,2)) as "MFTs/PaymentApproved",
  17. CAST((D.TotalMFTs/A.signups) AS DECIMAL(18,2)) as "MFTs/SignUps",
  18. B.MaleApproved,
  19. CAST((B.MaleApproved/B.DocApproved) AS DECIMAL(18,2)) as "Male%",
  20. B.FemaleApproved,
  21. CAST((B.FemaleApproved/B.DocApproved) AS DECIMAL(18,2)) as "Female%"
  22.  
  23. from (select
  24. date(m.created_at + interval '8' hour) as date,
  25. hour(m.created_at + interval '8' hour) as hour,
  26. count(distinct m.id) as signups
  27. from members m
  28. left outer join reservations r on r.member_id = m.id
  29. where m.created_at + interval '8' hour >= @start
  30. and m.imaginary = 'normal'
  31. group by 1,2 ) A
  32.  
  33. left join (select
  34. date(dl.created_at + interval '8' hour) as date,
  35. hour(dl.created_at + interval '8' hour) as hour,
  36. count(distinct case when dl.state not in ('noInput','null') then dl.member_id end) DocUploaded,
  37. count(distinct case when dl.state = 'approved' then dl.member_id end) DocApproved,
  38. count(distinct case when dl.state = 'reject' then dl.member_id end) DocRejected,
  39. count(distinct case when dl.gender = 'man' and dl.state = 'approved' then dl.member_id end) MaleApproved,
  40. count(distinct case when dl.gender = 'woman' and dl.state = 'approved' then dl.member_id end) FemaleApproved
  41. from driver_licenses dl
  42. join members m
  43. on m.id = dl.member_id
  44. where dl.created_at + interval '8' hour >= @start
  45. and m.imaginary = 'normal'
  46. group by 1,2) B
  47. on (B.date = A.date and B.hour = A.hour)
  48.  
  49. left join (select
  50. date(r.occupy_start_at + interval '8' hour) as date,
  51. hour(r.occupy_start_at + interval '8' hour) as hour,
  52. count(distinct case when r.state = 'completed' then r.member_id end) as ActiveMembers,
  53. count(distinct case when r.state = 'completed' then r.id end) as Bookings,
  54. sum(timestampdiff(minute,CONVERT_TZ(r.start_at, '+00:00', '+8:00'), CONVERT_TZ(r.end_at, '+00:00', '+8:00'))/60) as ridelength,
  55. sum(G.amount) as Charges
  56. from reservations r
  57. left outer join (select
  58. ch.reservation_id as rid,
  59. sum(ch.amount) as amount
  60. from payments ch
  61. group by 1
  62.  
  63. ) G on G.rid = r.id
  64. join members m
  65. on m.id = r.member_id
  66. where r.start_at + interval '8' hour >= @start
  67. and m.imaginary in ('normal')
  68. and r.state = 'completed'
  69. group by 1,2) C
  70. on (C.date = B.date and C.hour = B.hour)
  71.  
  72. left join (
  73. select
  74. date(c.created_at + interval '8' hour) as date,
  75. hour(c.created_at + interval '8' hour) as hour,
  76. count(distinct case when c.kind = 'subscriptionFee' then c.member_id end) as TotalMFTs
  77. from charges c
  78. join members m
  79. on m.id = c.member_id
  80. where c.created_at + interval '8' hour >= @start
  81. and m.imaginary = 'normal'
  82. group by 1,2) D
  83. on (D.date = C.date and D.hour = C.hour)
  84. left join (
  85. select
  86. date(pm.created_at + interval '8' hour) as date,
  87. hour(pm.created_at + interval '8' hour) as hour,
  88. count(distinct pm.member_id) as cardupload
  89. from
  90. payment_methods as pm
  91. where pm.state = 'approved'
  92. and pm.created_at + interval '8' hour >= @start
  93. group by 1,2) F
  94. on (F.hour = A.hour and F.hour = A.hour)
  95. left join (
  96. select
  97. date(d.updated_at + interval '8' hour) as date,
  98. hour(d.updated_at + interval '8' hour) as hour,
  99. count(distinct case when d.state = 'active' then d.id end) as Active_installs_2019
  100. from devices d
  101. where d.created_at + interval '8' hour >= @start
  102. group by 1,2 ) G
  103. on (G.date = A.date and G.hour = A.hour)
  104.  
  105. group by 1,2
  106. order by 1 desc;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement