MySQL 리트코드 | Rising Temperature (DATEDIFF, TIMESTAMPDIFF, DATE_ADD, DATE_SUB)

728x90

 

문제

https://leetcode.com/problems/rising-temperature/description/?envType=study-plan-v2&envId=top-sql-50

  • 전 날(어제)의 기온에 비해 오늘의 기온이 더 높은 날의 id 찾기

 

테이블

Weather id recordDate temperature
1 2025-01-01 10
2 2025-01-02 25
3 2025-01-03 20
4 2025-01-04 30
  • 전 날보다 오늘의 기온이 높은 날의 id는 2, 4

 

풀이과정

▶ DATEDIFF(날짜1, 날짜2) 사용 정답

# 셀프조인과 DATEDIFF

  • 어제와 오늘의 기온 비교를 위해 셀프 조인을 해줌
  • 조인 조건은 ① recordDate의 날짜가 하루 차이이고, ② 전 날에 비해 기온이 높은 경우에만 조인이 되도록 설정  
    • DATEDIFF(날짜1, 날짜2) : 날짜1 - 날짜2
      • 두 날짜 차이가 하루 차이가 나야 함.
      • 날짜1이 날짜2보다 최근 날짜이면 DATEDIFF값은 1로, 날짜1이 날짜2보다 과거 날짜이면 DATEDIFF값은 -1로 둬야 함.
    • cf. TIMESTAMPDIFF (단위, 날짜1, 날짜2)
      • 두 날짜 간의 차이를 어떤 단위로 표현할 것인지 설정할 수 있음.
      • 단위 예시
단위  
초  SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
분기 QUARTER
YEAR

 

# 정답

  • SELECT 문으로 id만 조회해주기
  • 셀프 조인, 조인 조건 설정
    • DATEDIFF(날짜1, 날짜2) = 1로 설정해줌 (날짜1이 더 최신 날짜)
    • 전 날의 기온이 당일의 기온보다 높은 경우만 필터링
1
2
3
SELECT w2.id
FROM Weather w1
JOIN Weather w2 ON DATEDIFF(w2.recordDate, w1.recordDate) = 1 AND w1.temperature < w2.temperature
cs

 

 

다른 사람 풀이 참고

▶ DATEADD (기준 날짜, INTERVAL) 사용 정답

# 셀프조인과 DATE_ADD

  • 어제와 오늘의 기온 비교를 위해 셀프 조인을 해줌
  • 조인 조건은 ① recordDate의 날짜가 하루 차이이고, ② 전 날에 비해 기온이 높은 경우에만 조인이 되도록 설정  
    • DATE_ADD(기준 날짜, INTERVAL) : 기준 날짜에 INTERVAL 단위만큼 더하기
      • 두 날짜 차이가 하루 차이가 나야 함.
        • DATE_ADD(기준 날짜, INTERVAL 1 DAY)
      • cf. DATE_SUB (기준 날짜, INTERVAL)
        • 기준 날짜에서 INTERVAL 단위만큼 빼주는 함수
      • 여기에서 '단위'는 상단의 TIMESTAMPDIFF 단위 예시 활용 가능

# 정답

  • SELECT 문으로 id만 조회해주기
  • 셀프 조인, 조인 조건 설정
    • DATE_ADD(기준 날짜, INTERVAL 1 DAY)로 설정해줌 (기준 날짜에 하루 더하기)
    • 전 날의 기온이 당일의 기온보다 높은 경우만 필터링
1
2
3
4
5
SELECT w1.id
FROM Weather w1
JOIN Weather w2
ON w1.recordDate = DATE_ADD(w2.recordDate, INTERVAL 1 DAY)
WHERE w1.temperature > w2.temperature;
cs

 

 

 

728x90

댓글