코딩 테스트 연습/[프로그래머스][리트코드] MySQL

197. Rising Temperature ⭐️

duswjd_data 2025. 8. 21. 09:34

문제

https://leetcode.com/problems/rising-temperature/description/


문제 설명

  • 어제보다 기온이 높았던 날짜의 id 구하기

정답 코드

SELECT w1.id
FROM weather w1 JOIN weather w2 ON DATEDIFF(w1.recordDate, w2.recordDate) = 1
WHERE w1.temperature > w2.temperature

 

- 날짜끼리 뺄셈을 해서 비교 → 데이터베이스가 모든 날짜를 다 계산해봐야 함 → 느릴 수 있음


코드 설명

 

  • 같은 테이블을 두 번 사용해 자기 자신과 조인
    • w1은 오늘 날짜, w2는 어제 날짜
  • 두 날짜의 차이를 계산해서, 딱 1일 차이일 때만 연결
    • 즉, w1의 날짜가 w2보다 하루 뒤인 경우만 매칭
  • 오늘(w1)의 온도가 어제(w2)보다 더 높은 경우만 필터링

 


개선된 코드

SELECT w1.id
FROM weather w1 JOIN weather w2 ON w1.recordDate = DATE_ADD(w2.recordDate, INTERVAL 1 DAY)
WHERE w1.temperature > w2.temperature

 

- w1의 날짜가 w2의 날짜보다 하루 뒤인지를 비교 → 계산이 덜 들어가고, 빠를 수 있음