포인트!
1. 처음 로그인한 event_date, 이틀연속 로그인한 부분을 잘 캐치해야 됨.
WITH N_D AS(
SELECT
player_id, event_date,
RANK() OVER(PARTITION BY player_id ORDER BY event_date) AS first_day,
LEAD(event_date,1) OVER(PARTITION BY player_id ORDER BY player_id) AS next_day
FROM
Activity
),
N_D2 AS(
SELECT
player_id, event_date, first_day, next_day,
CASE
WHEN first_day = 1 AND DATEDIFF(next_day,event_date) = 1 THEN 1
ELSE 0
END AS cnt
FROM
N_D
)
SELECT
ROUND(SUM(cnt)/COUNT(DISTINCT player_id),2) AS fraction
FROM
N_D2
N_D CTE :
먼저 RANK(), LEAD() 함수로 첫 로그인 컬럼과, 이후 로그인 날짜를 구해준다.

N_D2 CTE :
first_day = 1 (첫 로그인)
DATEDIFF(next_day, event_date) = 1 (차이가 하루나는 day)
두 조건을 기준으로 카운팅

최종 식
카운팅이 1인 플레이어의 수 /플레이어의 수
다시한번 풀어보면 좋을 듯.
아주 재미있었다.