문제
어제 날짜와 비교하여 온도가 더 높은 모든 날짜를 찾는 솔루션을 작성해라.
나의 풀이)
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로 조건을 걸어줌.
'TIL > SQL' 카테고리의 다른 글
리트코드| Confirmation Rate (My SQL) (1) | 2024.09.04 |
---|---|
리트코드| Students and Examinations (My SQL) (0) | 2024.09.03 |
프로그래머스| 상품을 구매한 회원 비율 구하기 (0) | 2024.08.14 |
프로그래머스| 자동차 대여 기록 별 대여 금액 구하기(MySQL) (0) | 2024.08.09 |
프로그래머스| 입양 시각 구하기(2) (MySQL) <RECURSIVE CTE> (2) | 2024.08.07 |