Skip to content

3089. Find Bursty Behavior 👎

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
WITH
  FilteredPosts AS (
    SELECT *
    FROM Posts
    WHERE post_date BETWEEN '2024-02-01' AND '2024-02-28'
  ),
  AvgWeeklyPosts AS (
    SELECT user_id, COUNT(*) / 4.0 AS avg_weekly_posts
    FROM FilteredPosts
    GROUP BY 1
  ),
  UserTo7dayPosts AS (
    SELECT
      FirstPost.user_id,
      COUNT(*) AS sevenday_posts
    FROM Posts AS FirstPost
    INNER JOIN Posts AS FollowingPost
      ON (
        FirstPost.user_id = FollowingPost.user_id
        AND FollowingPost.post_date BETWEEN FirstPost.post_date
        AND DATE_ADD(FirstPost.post_date, INTERVAL 6 DAY))
    GROUP BY FirstPost.user_id, FirstPost.post_date
  ),
  UserToMax7dayPosts AS (
    SELECT user_id, MAX(sevenday_posts) AS max_7day_posts
    FROM UserTo7dayPosts
    GROUP BY 1
  )
SELECT *
FROM UserToMax7dayPosts
INNER JOIN AvgWeeklyPosts
  USING (user_id)
WHERE UserToMax7dayPosts.max_7day_posts >= 2 * AvgWeeklyPosts.avg_weekly_posts
ORDER BY user_id;