Game Play Analysis IV

medium database sql

Problem

Return the fraction of players who logged back in exactly 1 day after their first login.

Inputrows = [(1,2,'2016-03-01',5),(1,2,'2016-03-02',6),(2,3,'2017-06-25',1),(3,1,'2016-03-02',0),(3,4,'2018-07-03',5)]
Output0.33
One pass: find first_login per player; second pass checks (pid, first_login + 1).

SELECT ROUND(COUNT(DISTINCT a.player_id) / COUNT(DISTINCT b.player_id), 2) AS fraction
FROM Activity a
RIGHT JOIN (SELECT player_id, MIN(event_date) d FROM Activity GROUP BY player_id) b
  ON a.player_id = b.player_id AND a.event_date = DATE_ADD(b.d, INTERVAL 1 DAY);
Time: O(n) Space: O(players)