
처음 코로나에 확진된 후 음성 판정을 받은 환자들의 회복 기간을 구하라.
[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개로 나누면 깔끔할 것 같다.