TIL/SQL

리트코드| 온도 상승(MySQL)

jojoon2786 2024. 8. 22. 13:23

 

문제

어제 날짜와 비교하여 온도가 더 높은 모든 날짜를 찾는 솔루션을 작성해라.

 

나의 풀이)

with w1 as (
    select id, recordDate, temperature   
    from Weather),
w2 as (
    select id, recordDate, temperature
    from Weather)

select w1.id
from w1,w2
where datediff(w1.recordDate, w2.recordDate) = 1 and w1.temperature > w2.temperature

임시테이블로 w1과 w2를 만들어 조건을 부여하여 조회하였다.

 

튜터님의 풀이)

with temp1 as(
    select id, recordDate, temperature , temperature > lag(temperature) over (order by recordDate asc) as temp_higher
    from weather)

select id
from temp1
where temp_higher = 1 ;

window function을 사용하여 풀이

 

lag(temperature) over (order by recordDate asc) as temp_higher 

> 현재 행의 temperature 값과 이전 행의 temperature 값을 비교, LAG() 함수는 기본적으로 이전 행의 값을 반환함.

조건 식이므로 결과는 1, 0의 형태로 저장된다.

위의 저장 결과를 본 쿼리에서 temp_higher = 1로 조건을 걸어줌.