[SQL] 윈도우 함수 LAG를 사용하여 이전 날짜와 비교해보기

JIEUN KANG·2021년 1월 12일
0

leetcode 197번 문제 Rising Temperature
(https://leetcode.com/problems/rising-temperature/)

leetcode 197번 문제 Rising Temperature(https://leetcode.com/problems/rising-temperature/)

특정 데이터의 date와 그 date의 바로 직전일의 기온을 비교했을때, 직전일보다 그 당시의 기온가 높은 것을 출력하는 문제였다.

비교를 하기 전에 어떤 테이블을 형성해볼지 먼저 고민해봤다.
이전 날짜의 칼럼과 이전 날짜의 기온 칼럼이 같이 필요해야 할것 같아서, 윈도우 함수중에 LAG를 사용해서 하나씩 아래로 밀어줬다. 정렬 방식은 DATE와 ID 배열 방식이 같아서, 일단 DATE로 설정해줬다.

다만, 이 문제는 여기서 끝이 아니라,
직전일이 아니라 2일 전 데이터가 주어질 수도 있는 상황이어서
쿼리를 submit했을때 오류가 나게 된다.
(처음에 이 함정에 빠져서 실행만 했을때 좋아했다가 서브밋하고 반성하게 됐다.)

때문에 이전 날짜에 하루를 더한 것이 당일과 같은지에 대한 조건이 필요하다.

SELECT a.id
FROM (SELECT *
      ,LAG (recordDate) OVER (ORDER BY recordDate) AS Prev_date
      ,LAG (Temperature) OVER (ORDER BY recordDate) AS Prev_temp
      FROM Weather) AS a
WHERE a.recordDate = date_add(a.Prev_date,INTERVAL 1 DAY)
AND a.Temperature > a.Prev_temp

머릿속에서 단순히 생각한 것과, 쿼리의 결과물은 얼마든지 다를 수 있다는 것을 많이 반성하게 된 문제같다. 좋은 문제!

profile
가장 보통의 존재

0개의 댓글