[MySQL실습] 197. Rising Temperature

c.Hano·2024년 12월 11일

MySQL실습

목록 보기
14/21

정답

SELECT today.id
FROM Weather AS today
    INNER JOIN Weather AS yesterday ON yesterday.id+1 = today.id
WHERE today.temperature > yesterday.temperature
  • ON뒤에 같은 값만 썼었는데, +1 과 같이 값을 더해서 사용하는 것도 가능하다.
  • 잘 모를땐 하나씩 출력해보며 수정할 것을 수정해나가자.
SELECT today.id AS today_id
    , today.recordDate AS today_recordDate
    , today.Temperature AS today_Temperature
    , yesterday.id AS yesterday_id
    , yesterday.recordDate AS yesterday_recordDate
    , yesterday.Temperature AS yesterday_Temperature
FROM Weather AS today
    INNER JOIN Weather AS yesterday ON yesterday.id+1 = today.id
WHERE today.temperature > yesterday.temperature

  • Weather AS today 와 Weather AS yesterday로 한개의 테이블을 셀프조인하였다.
  • Weather.id+1로 today와 yesterday의 date를 맞추었다.
  • 오늘 날짜의 온도가 어제 날짜의 온도보다 높은 경우의 id를 반환해야 한다.
  • WHERE절 사용

하루가 흘러갈때마다 id가 1이 올라서 id+1을 사용하여 셀프조인을 했는데 하루가 지날때마다 id가 1이 오르지 않는 데이터가 있었다.. 함정 오짐

id를 사용하지 않고 recordDate를 사용하여 셀프조인을 해보자.

int값이 아닌 날짜를 건드리고 싶으면 날짜 함수를 따로 사용하여야 한다.

DATE_ADD(올리고싶은 데어터값 , INTERVAL 1 SECOND) : 초 상승
DATE_ADD(올리고싶은 데어터값 , INTERVAL 1 MINUTE) : 분 상승
DATE_ADD(올리고싶은 데어터값 , INTERVAL 1 HOUR) : 시간 상승
DATE_ADD(올리고싶은 데어터값 , INTERVAL 1 DAY) : 날짜  상승
DATE_ADD(올리고싶은 데어터값 , INTERVAL 1 MONTH) : 달 상승
DATE_ADD(올리고싶은 데어터값 , INTERVAL 1 YAER) : 년 상승
DATE_ADD(올리고싶은 데어터값 , INTERVAL -1 DAY) : 날짜 -1 상승 -> 날짜 하루 전

진짜 정답

SELECT today.id
FROM Weather AS today
    INNER JOIN Weather AS yesterday 
    ON DATE_ADD(yesterday.recordDate, INTERVAL 1 DAY) = today.recordDate
WHERE today.temperature > yesterday.temperature
profile
꼬질이

0개의 댓글