Leetcode MYSQL - 3586 (Medium)

Pocketopi·2025년 7월 21일

[MYSQL] Leetcode

목록 보기
34/34
post-thumbnail

🔔 문제

처음 코로나에 확진된 후 음성 판정을 받은 환자들의 회복 기간을 구하라.
[Find COVID Recovery Patients]

🎯 풀이방법

🔑 핵심

자기 자신과 조인(Self Join) 을 통해 같은 환자 ID의 양쪽 테스트 결과를 연결한다. A : 첫 양성, B : 양성 후 첫 음성
B.TEST_DATE >= A.TEST_DATE 조건을 통해 확진 이후의 음성 결과만 남긴다.
DATEDIFF로 날짜 차이를 계산하여 회복 기간을 구한다.

💻 전체 코드

WITH CTE AS (SELECT A.PATIENT_ID, MIN(A.TEST_DATE) AS P_DATE, MIN(B.TEST_DATE) AS C_DATE
             FROM COVID_TESTS A JOIN COVID_TESTS B
             ON A.PATIENT_ID = B.PATIENT_ID 
             AND A.RESULT = "Positive" AND B.RESULT = "Negative"
             AND B.TEST_DATE >= A.TEST_DATE
             GROUP BY A.PATIENT_ID)

SELECT C.PATIENT_ID, PATIENT_NAME, AGE, DATEDIFF(C_DATE, P_DATE) AS RECOVERY_TIME
FROM CTE C JOIN PATIENTS P
ON C.PATIENT_ID = P.PATIENT_ID
ORDER BY RECOVERY_TIME, PATIENT_NAME

💡 핵심 문법 및 배운점

  • Self Join

  • DATEDIFF(date1, date2)
    두 날짜 사이의 일수 차이 계산 → 회복 기간 구할 때 유용.

  • ON 절이 상당히 길어짐 -> CTE를 첫 양성과 그 이후 첫 음성을 나누어 2개로 나누면 깔끔할 것 같다.

⏱️ 걸린 시간: 16분 10초

profile
통계학/컴퓨터공학 전공 4학년 학생 DA뿌수기 일기장

0개의 댓글