[SQL] DATE_ADD(INTERVAL) 날짜 더하기 빼기

Gi Woon Lee·2025년 4월 30일

SQL

목록 보기
33/33
  • 날짜 더하기 DATE_ADD(INTERVAL)
  • 날짜 빼기 DATE_SUN(INTERVAL)

https://leetcode.com/problems/game-play-analysis-iv/description/

문제:
"로그인 로그 데이터를 보고 첫 접속에 이어 다음 날에도 연달아 접속한 ID의 fraction을 구하여라"
*fraction = 비율

논리 흐름:
1. 처음 접속한 id와 date를 구한다.
2. 처음 접속한 date에 하루를 더하고 해당 날짜가 존재하는 id만 필터링한다. JOIN
3. 처음 접속한 id의 갯수(COUNT)와 연달아 접속한 id의 갯수(COUNT)를 통해 fraction을 계산한다.

방법:
1. GROUP BY id, MIN(date)를 통해 첫 접속 날짜와 아이디를 구한다. → CTE로 저장
2. 1번에서 구한 CTE와 원본 DB를 SELFJOIN을 통하여 합치고 AND조건과 DATE_ADD(date, INTERVAL 1 DAY)를 통해 필터링한다.
3. 1번에서 구한 데이터와 2번에서 구한 데이터를 LEFT JOIN으로 합치고 COUNT를 사용해서 비율을 구한다.

정답쿼리:

WITH FirstLogin AS(
    SELECT player_id, MIN(event_date) AS first_login
    FROM Activity
    GROUP BY player_id
),
LoginNextDay AS(
    SELECT a.player_id
    FROM Activity a JOIN FirstLogin f
    ON a.player_id = f.player_id
    AND a.event_date = DATE_ADD(f.first_login, INTERVAL 1 DAY)
) # id which have conse
SELECT ROUND(COUNT(l.player_id)/COUNT(f.player_id),2) AS fraction
FROM FirstLogin f LEFT JOIN LoginNextDay l
ON f.player_id = l.player_id
  • 기술적으로는 DAEA_ADD(date, INTERVAL) 말고 새로울 것은 없다.
  • 하지만 논리 흐름과 방법을 생각해내는 사고 훈련이 필요하다.
  • 반드시 복습하여 요구하는 문제와 문제 해결 논리를 바로바로 생각해내는 훈련을 하자.

0개의 댓글