Guest User

Untitled

a guest
May 25th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. WITH ppac_users AS (
  2. SELECT
  3. user_id,
  4. app_user_id,
  5. first_name,
  6. last_name,
  7. batch_code,
  8. email,
  9. phone_number::TEXT,
  10. signup_advisor_id,
  11. transfer_confirmed_at::TIMESTAMP,
  12. onboard_datetime::TIMESTAMP,
  13. user_created_at::TIMESTAMP,
  14. call_center_partner_id,
  15. ARRAY_REMOVE(cohorts, 'new_claims') as cohorts,
  16. zendesk_id,
  17. current_step
  18. FROM dfu_users as users
  19. LEFT JOIN (
  20. SELECT id as zendesk_id, external_id
  21. FROM zendesk.users
  22. ) as zendesk_users
  23. ON users.app_user_id = zendesk_users.external_id
  24. ),
  25.  
  26. df_admins AS (
  27. SELECT df_admins.*,
  28. ids.source_id AS app_admin_id,
  29. pod_ids.source_id AS onboarding_pod_id
  30. FROM df_admins
  31. LEFT OUTER JOIN (SELECT identifiable_id, source_id FROM identifiers WHERE source_project = 'pillpack' AND source_class = 'Admin')
  32. AS ids
  33. ON df_admins.id = ids.identifiable_id
  34. LEFT OUTER JOIN (SELECT identifiable_id, source_id FROM identifiers WHERE source_project = 'pillpack' AND source_class = 'OnboardingPod') AS pod_ids
  35. ON df_admins.pod_id = pod_ids.identifiable_id
  36. ),
  37.  
  38. ppac_f9_groups AS (--Selects the most recent team for every advisor email out of Five9 Agent States
  39. SELECT DISTINCT ON (agent_email)
  40. agent_email,
  41. agent_group,
  42. ROW_NUMBER() OVER(ORDER BY agent_email DESC) AS primary_key
  43. FROM five9_agent_state_logs AS logs
  44. WHERE agent_group IS NOT NULL AND agent_email IS NOT NULL
  45. ORDER BY agent_email, timestamp DESC
  46.  
  47. ),
  48.  
  49. ppac_firsttouch_calls AS (--This selects the 45 day first-touch timestamp for each phone number and their transfer timestamp
  50. SELECT DISTINCT ON (users.app_user_id)
  51. users.app_user_id,
  52. call_logs.id as call_log_id,
  53. call_logs.number1,
  54. users.transfer_confirmed_at as transfer_confirmed_date,
  55. call_timestamp as min_timestamp,
  56. row_number() OVER(ORDER BY call_timestamp ASC) as primary_key,
  57. (users.transfer_confirmed_at - call_timestamp)::interval as attribution_window,
  58. (
  59. SELECT count(*)
  60. FROM (
  61. SELECT *
  62. FROM generate_series(call_timestamp::timestamp, users.transfer_confirmed_at::timestamp, '1 day') i
  63. ) as grandtable
  64. WHERE date_part('dow', i) NOT IN (0)
  65. ) as count_workdays
  66. FROM (
  67.  
  68. --This selects phone numbers and call timestamps for all calls
  69. SELECT *, CAST((call_logs.date::TEXT||' ' ||call_logs.time::TEXT) AS TIMESTAMP WITHOUT TIME ZONE) as call_timestamp
  70. FROM public.five9_call_logs as call_logs
  71. --FROM ppac_replica_public.f9_call_logs as call_logs
  72. WHERE call_logs.call_type NOT LIKE 'Manual' --we don't want to attribute anything back to a "Manual" outbound call type
  73.  
  74. ) as call_logs
  75. INNER JOIN (
  76.  
  77. -- This selects all users and their transfer timestamps and phone numbers
  78. SELECT
  79. users.phone_number::BIGINT,
  80. users.app_user_id,
  81. users.transfer_confirmed_at::TIMESTAMP
  82. FROM public.dfu_users AS users
  83. WHERE transfer_confirmed_at IS NOT NULL
  84. GROUP BY 1,2,3
  85.  
  86. ) as users ON (users.phone_number = call_logs.number1)
  87. WHERE (
  88. ( extract(epoch from (transfer_confirmed_at - call_timestamp)::interval) >= 0) AND --we don't want to include calls occuring after the transfer timestamp
  89. ( extract(epoch from (transfer_confirmed_at - call_timestamp)::interval) <= (45*(24*60*60)))) --we don't want to include calls further than 45 days after the transfer timestamp
  90. ORDER BY users.app_user_id, call_timestamp ASC
  91.  
  92. )
  93. SELECT
  94. DATE((ppac_customer_analysis.transfer_confirmed_at )::timestamptz AT TIME ZONE 'America/New_York') AS "transfer_confirmed_at",
  95. df_admins_advisor.email AS "agent_email",
  96. five9_call_logs.campaign AS "campaign",
  97. five9_call_logs.call_type AS "call_type",
  98. COUNT(DISTINCT (CASE WHEN 'yes' = 'yes'
  99. THEN five9_call_logs.number1
  100. ELSE
  101. 0
  102. END)) AS "count_closes"
  103. FROM ppac_users AS ppac_customer_analysis
  104. LEFT JOIN df_admins AS df_admins_advisor ON ppac_customer_analysis.signup_advisor_id = df_admins_advisor.app_admin_id
  105. LEFT JOIN ppac_f9_groups ON df_admins_advisor.email = LOWER(ppac_f9_groups.agent_email)
  106. LEFT JOIN ppac_firsttouch_calls ON ppac_customer_analysis.app_user_id = ppac_firsttouch_calls.app_user_id
  107. LEFT JOIN public.five9_call_logs AS five9_call_logs ON ppac_firsttouch_calls.call_log_id::BIGINT = five9_call_logs.id::BIGINT
  108.  
  109. WHERE ((((ppac_customer_analysis.transfer_confirmed_at ) >= ((SELECT ((DATE_TRUNC('day', CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York') + (-44 || ' day')::INTERVAL) AT TIME ZONE 'America/New_York'))) AND (ppac_customer_analysis.transfer_confirmed_at ) < ((SELECT (((DATE_TRUNC('day', CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York') + (-44 || ' day')::INTERVAL) + (45 || ' day')::INTERVAL) AT TIME ZONE 'America/New_York')))))) AND ((ppac_f9_groups.agent_group IN ('PP-Morpheus', 'PP-Kronos', 'PP-Apollo', 'PP-Athena', 'PP-Nike', 'PP-Zeus', 'PP-Hercules'))) AND (((five9_call_logs.campaign IS NOT NULL) AND five9_call_logs.campaign <> 'Manual Outbound'))
  110. GROUP BY 1,2,3,4
  111. ORDER BY 1 DESC
Add Comment
Please, Sign In to add comment