본문 바로가기
sql

[Leetcode/SQL] 197.Rising Temperature

by 리토스송 2024. 8. 19.

문제

어제 기온과 비교해서 기온이 높은  날짜만  id를 출력해보셈


최종쿼리

with temp as(
select *,
       lag(temperature) over(order by recordDate) as pre_tem,
       lag(recordDate) over(order by recordDate) as pre_date
from weather 
)

select id
from temp 
where temperature >pre_tem
and datediff(recordDate,pre_date) =1;

쿼리 설명 + 느낀점

어제 기온을 비교하기 위해 어제의 날짜와 어제의 기온 컬럼을 가져와야 하는데 현재 행 기준 이전 행을 가져오는 lag 윈도우 함수가 제일 먼저 떠올랐다. with문과 lag 윈도우 함수를 활용해 가져온 후 메인 쿼리에서 어제의 기온보다 높은 온도의 id와 어제의 날짜는 오늘 날짜와의 차이가 1이기 때문에 where절에 datediff를 활용해 적어주었다. 

 

문제를 보고 pre_tem(어제 온도)를 구하는 lag 함수까지는 쉽게 떠올렸지만, pre_date와 datediff를 활용해 어제의 날짜만을 비교하기 위한 조건을 필터링해주는데 시간이 오래걸렸기 때문에 짚고 넘어가야겠다.