Advertisement
kirzecy670

Untitled

Dec 18th, 2024 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. WITH
  2. exp_users AS (
  3.     SELECT
  4.         ft.uid AS uid,
  5.         MAX(visitParamExtractString(ft.addJson, 'option')) AS exp_group
  6.     FROM
  7.         stat.funnelTrack AS ft
  8.     WHERE
  9.         ft.dt >= '2024-12-01'
  10.         AND ft.action = 'pteam_appstat_v31'
  11.     GROUP BY
  12.         ft.uid
  13.     HAVING
  14.         exp_group IN ('old', 'new')
  15. ),
  16. reinstall AS (
  17. SELECT distinct uid
  18.                    FROM stat.funnelTrack
  19.                    WHERE dt between '2024-11-01' AND '2025-06-01'
  20.                      AND (action in ('bind_user', 'rebind_user')
  21.                               AND visitParamExtractString(addJson, 'reason') in
  22.                                   ('email', 'loginByEmailAndCode', 'restoreByAdId',
  23.                                    'adid', 'moveGlobalToRu', 'migration')
  24.                        or action = 'reinstall_detected')
  25. ),
  26. pre_aggregated_data AS (
  27.     SELECT
  28.         uid,
  29.         dt,
  30.         LENGTH(open) + LENGTH(open_first) AS session_length,
  31.         notEmpty(open_function_records) AS is_open_func_records,
  32.         LENGTH(open_function_records) AS len_func_records,
  33.         notEmpty(open_function_noise) AS is_open_func_noise,
  34.         LENGTH(open_function_noise) AS len_func_noise,
  35.         notEmpty(open_function_zones) AS is_open_func_zones,
  36.         LENGTH(open_function_zones) AS len_func_zones,
  37.         notEmpty(open_parent_activity) AS is_open_parent_activity,
  38.         LENGTH(open_parent_activity) AS len_parent_activity,
  39.         notEmpty(open_function_appstat) AS is_open_func_appstat,
  40.         LENGTH(open_function_appstat) AS len_func_appstat
  41.     FROM
  42.         analytics.parent_actions pa JOIN exp_users USING uid
  43.     WHERE
  44.         dt >= today() - INTERVAL '30 day'
  45. --        AND dt < today()
  46.         AND dt >= '2024-12-01'
  47. ),
  48. events AS (SELECT
  49.         uid,
  50.         uniqExact(dt) FILTER (WHERE action = 'app_stat_button') AS is_app_stat_button,
  51.         count(uid) FILTER (WHERE action = 'app_stat_button') AS len_app_stat_button,
  52.         uniqExact(dt) FILTER (WHERE action = 'appstat_app_lock_toggle') AS is_app_lock_toggle,
  53.         count(uid) FILTER (WHERE action = 'appstat_app_lock_toggle') AS len_app_lock_toggle,
  54.         uniqExact(dt) FILTER (WHERE action = 'appstat_lock_button_click') AS is_lock_button_click,
  55.         count(uid) FILTER (WHERE action = 'appstat_lock_button_click') AS len_lock_button_click
  56.     FROM
  57.         stat.funnelTrack ft JOIN exp_users USING uid
  58.     WHERE
  59.         ft.dt >= today() - INTERVAL '30 day'
  60.         AND (action IN ('appstat_block_all_button_click', 'appstat_app_lock_toggle', 'appstat_lock_button_click')
  61.         OR (action = 'app_stat_button' AND visitParamExtractString(addJson, 'from') = 'app_stat'))
  62. --        AND dt < today()
  63.         AND dt >= '2024-12-01'
  64.     GROUP BY
  65.         1
  66. ),
  67. users AS (
  68. SELECT
  69.     uid,
  70.     COUNT(uid) AS days, -- Aggregate days
  71.     SUM(session_length) AS sessions,
  72.     SUM(is_open_func_records) AS open_func_records,
  73.     SUM(len_func_records) AS len_func_records,
  74.     SUM(is_open_func_noise) AS open_func_noise,
  75.     SUM(len_func_noise) AS len_func_noise,
  76.     SUM(is_open_func_zones) AS open_func_zones,
  77.     SUM(len_func_zones) AS len_func_zones,
  78.     SUM(is_open_parent_activity) AS open_parent_activity,
  79.     SUM(len_parent_activity) AS len_parent_activity,
  80.     SUM(is_open_func_appstat) AS open_func_appstat,
  81.     SUM(len_func_appstat) AS len_func_appstat
  82. FROM
  83.     pre_aggregated_data
  84. GROUP BY
  85.     uid
  86. ORDER BY
  87.     sessions DESC
  88. ),
  89. metrics AS (
  90.     SELECT
  91.         pp.region AS region,
  92.         pp.platform AS platform,
  93.         pp.full_reg_datetime::date AS full_reg_datetime,
  94.         pp.uid AS uid,
  95.         pp.had_any_payment,
  96.         exp_users.exp_group,
  97.         CASE
  98.             WHEN dateDiff('day', pp.full_reg_datetime, now()) < 7 THEN 'A. 1 week'
  99.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 7 AND 29 THEN 'B. 2-4 weeks'
  100.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 30 AND 59 THEN 'C. 2 months'
  101.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 60 AND 89 THEN 'D. 3 months'
  102.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 90 AND 119 THEN 'E. 4 months'
  103.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 120 AND 149 THEN 'F. 5 months'
  104.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 150 AND 179 THEN 'G. 6 months'
  105.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 180 AND 364 THEN 'H. 7-12 months'
  106.             WHEN dateDiff('day', pp.full_reg_datetime, now()) BETWEEN 365 AND 729 THEN 'I. 1-2 years'
  107.             ELSE 'J. > 2 years'
  108.         END AS weeks_group,
  109.         CASE
  110.             WHEN pp.child_android_cnt > 0 AND pp.child_ios_cnt > 0 THEN 'both'
  111.             WHEN pp.child_android_cnt > 0 THEN 'android'
  112.             WHEN pp.child_ios_cnt > 0 THEN 'ios'
  113.             WHEN pp.child_watch_cnt > 0 THEN 'watch'
  114.             ELSE 'other'
  115.         END AS child_group,
  116.         CASE
  117.             WHEN users.days BETWEEN 29 AND 30 THEN 'F. 29-30 days'
  118.             WHEN users.days BETWEEN 22 AND 28 THEN 'E. 22-28 days'
  119.             WHEN users.days BETWEEN 15 AND 21 THEN 'D. 15-21 days'
  120.             WHEN users.days BETWEEN 8 AND 14 THEN 'C. 8-14 days'
  121.             WHEN users.days BETWEEN 3 AND 7 THEN 'B. 3-7 days'
  122.             WHEN users.days BETWEEN 1 AND 2 THEN 'A. 1-2 days'
  123.             ELSE 'Other'
  124.         END AS activity_group,
  125.         days,
  126.         sessions,
  127.         open_func_records,
  128.         len_func_records,
  129.         open_func_noise,
  130.         len_func_noise,
  131.         open_func_zones,
  132.         len_func_zones,
  133.         open_parent_activity,
  134.         len_parent_activity,
  135.         open_func_appstat,
  136.         len_func_appstat,
  137.         ROUND(users.sessions / NULLIF(users.days, 0), 0) AS avg_sessions_p_day,
  138.         is_app_stat_button,
  139.         len_app_stat_button,
  140.         is_app_lock_toggle,
  141.         len_app_lock_toggle,
  142.         is_lock_button_click,
  143.         len_lock_button_click
  144.     FROM
  145.         analytics.parent_properties pp
  146.     JOIN
  147.         exp_users ON exp_users.uid = pp.uid
  148.     JOIN
  149.         users ON users.uid = pp.uid
  150.     LEFT JOIN events ON  events.uid = pp.uid
  151.     LEFT ANTI JOIN reinstall AS ri ON pp.uid = ri.uid
  152.     WHERE
  153.         pp.is_full_register
  154.         AND pp.full_reg_datetime >= '2016-01-01'
  155. )
  156. SELECT
  157.     metrics.*
  158. FROM
  159.     metrics
  160. HAVING region NOT IN ('none') --AND (is_app_stat_button > 0 OR len_app_stat_button > 0)
  161. ORDER BY exp_group, region, weeks_group, full_reg_datetime, uid;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement