반응형
문제
Find all dates' Id with higher temperatures compared to its previous dates (yesterday).
Return the result table in any order.
문제 요약
전 날(하루 차이)과 비교해서 온도가 높은 날짜의 Id를 추출하라.
풀이
첫 번째 시도
WITH t AS(
SELECT *
, LAG(temperature) OVER (ORDER BY recordDate) AS prev_temp
FROM weather)
SELECT t.id
FROM t
WHERE t.temperature - t.prev_temp > 0
: 예시로 준 데이터의 경우, 답이 맞지만 다른 데이터가 있는 test case의 경우 돌아가지 않았다.
> 문제는 LAG 함수를 사용해 하루 차이가 나는 전 날이 아니더라도 그냥 며칠 건너뛴 날이 전 행에 있으면 그 행과 비교를 하게 되어 답이 틀리게 된다.
> 날짜를 기준으로 하루 전 날인 것만 비교하도록 코드를 다시 짜야 한다.
스터디 팀원의 다른 풀이
SELECT w1.id
FROM weather w1, weather w2
WHERE DATEDIFF(w1.recorddate, w2.recorddate) = 1 AND w1.temperature > w2.temperature;
: FROM a a1, a a2의 경우 자동으로 Cross join을 하게 되고
WHERE DATEDIFF(w1.recorddate, w2.recorddate) = 1를 통해 하루 차이가 나는 날들끼리 비교를 하게 된다.
배운 점
주어진 데이터의 단편적인 부분만 보고 코드를 짜지 말자
반응형