Best approach using MIN || DATE_ADD || CTE || Subquery:
WITH CTE AS\n(SELECT player_id, MIN(event_date) as first_login\nFROM Activity\nGROUP BY player_id),\n\n\nCTE2 AS\n(SELECT * , DATE_ADD(first_login, INTERVAL 1 D
WITH CTE AS\n(SELECT player_id, MIN(event_date) as first_login\nFROM Activity\nGROUP BY player_id),\n\n\nCTE2 AS\n(SELECT * , DATE_ADD(first_login, INTERVAL 1 DAY) AS next_login\nFROM CTE)\n\nSELECT \nROUND((SELECT COUNT(DISTINCT player_id)\nFROM Activity\nWHERE (player_id, event_date) IN (SELECT player_id,next_login from CTE2 ))/(SELECT COUNT(DISTINCT player_id) from Activity),2) AS fraction\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*WITH CTE AS\n(select player_id, MIN(event_date) AS first_login\nFROM Activity\nGROUP BY player_id),\n\nCTE2 AS\n(SELECT * , DATE_ADD(first_login, INTERVAL 1 DAY) AS NEXT_DATE\nFROM CTE)\n\nselect\nROUND((SELECT COUNT(DISTINCT player_id)\nFROM Activity\nWHERE (player_id, event_date) IN \n(SELECT player_id, NEXT_DATE from CTE2))            /(select count(distinct player_id) from Activity),2) AS fraction;\n*/\n```
['MySQL']