Advertisement
kirzecy670

Untitled

Oct 30th, 2024
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 2.95 KB | None | 0 0
  1. --// Сегменты
  2. WITH users AS (
  3.     SELECT
  4.         uid,
  5.         COUNT(*) AS days,
  6.         SUM(LENGTH(open) + LENGTH(open_first)) AS sessions
  7.     FROM
  8.         analytics.parent_actions pa
  9.     WHERE
  10.         dt BETWEEN date_trunc('week', today()) - INTERVAL '1 month' AND date_trunc('week', today())
  11.     GROUP BY
  12.         uid
  13. ),
  14. metrics AS (
  15.     SELECT
  16.         region,
  17.         platform,
  18.         full_reg_datetime,
  19.         uid,
  20.         days,
  21.         sessions,
  22.         CASE
  23.             WHEN dateDiff('week', full_reg_datetime, now()::date) = 0 THEN 'A. < 1 week'
  24.             WHEN dateDiff('week', full_reg_datetime, now()::date) = 1 THEN 'B. ~ 1 week'
  25.             WHEN dateDiff('week', full_reg_datetime, now()::date) <= 4 THEN 'C. < 1 month'
  26.             WHEN dateDiff('week', full_reg_datetime, now()::date) > 4 AND dateDiff('week', full_reg_datetime, now()::date) <= 8 THEN 'D. 1-2 months'
  27.             WHEN dateDiff('week', full_reg_datetime, now()::date) > 8 AND dateDiff('week', full_reg_datetime, now()::date) <= 16 THEN 'E. 2-4 months'
  28.             WHEN dateDiff('week', full_reg_datetime, now()::date) > 16 AND dateDiff('week', full_reg_datetime, now()::date) <= 32 THEN 'F. 4-8 months'
  29.             WHEN dateDiff('week', full_reg_datetime, now()::date) > 32 AND dateDiff('week', full_reg_datetime, now()::date) <= 52 THEN 'G. 8-12 months'
  30.             WHEN dateDiff('week', full_reg_datetime, now()::date) > 52 AND dateDiff('week', full_reg_datetime, now()::date) <= 104 THEN 'H. 1-2 years'
  31.             ELSE 'I. > 2 years'
  32.         END AS weeks_group,
  33.         CASE
  34.             WHEN child_android_cnt > 0 AND child_ios_cnt > 0 THEN 'both'
  35.             WHEN child_android_cnt > 0 THEN 'android'
  36.             WHEN child_ios_cnt > 0 THEN 'ios'
  37.             WHEN child_watch_cnt > 0 THEN 'watch'
  38.             ELSE 'other'
  39.         END AS child_group,
  40.         CASE
  41.             WHEN days BETWEEN 29 AND 30 THEN 'f. 29-30 days'
  42.             WHEN days BETWEEN 22 AND 28 THEN 'e. 22-28 days'
  43.             WHEN days BETWEEN 15 AND 21 THEN 'd. 15-21 days'
  44.             WHEN days BETWEEN 8 AND 14 THEN 'c. 8-14 days'
  45.             WHEN days BETWEEN 3 AND 7 THEN 'b. 3-7 days'
  46.             WHEN days BETWEEN 1 AND 2 THEN 'a. 1-2 days'
  47.             ELSE 'other'
  48.         END AS activity_group,
  49.         ROUND(sessions / NULLIF(days, 0), 0) AS avg_sessions_p_day
  50.     FROM
  51.         analytics.parent_properties pp
  52.     JOIN
  53.         users USING (uid)
  54.     WHERE
  55.         is_full_register
  56.         AND full_reg_datetime != '1970-01-01 00:00:00'
  57.         AND full_reg_datetime <= date_trunc('week', today())
  58. )
  59. SELECT
  60.     region,
  61.     platform,
  62.     activity_group,
  63.     child_group,
  64.     weeks_group,
  65.     avg_sessions_p_day,
  66.     SUM(metrics.sessions) AS session,
  67.     SUM(days) AS day,
  68.     uniqExact(uid) AS users
  69. FROM
  70.     metrics
  71. WHERE
  72.     region IN ('ru', 'global')
  73.     AND platform IN ('iOS', 'Android')
  74. GROUP BY
  75.     1, 2, 3, 4, 5, 6
  76. ORDER BY
  77.     1, 2, 3, 4, 5, 6;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement