테이블은 하나이며 테이블 명은 Weather이다
컬럼은 id와 날짜를 나타내는 recordDate,temperature가 있다.
문제
어제와 비교했을 때 온도가 더 높은 Id
를 찾아라
결과 표는 임의의 순으로 반환해라.
Flow
1.오늘 날짜와 어제 날짜를 분리
2.오늘 날짜의 온도와 어제 날짜의 온도를 비교하여 오늘 날짜가 더 큰 Id
를 선택한다.
Self 조인 풀이
select w1.id from Weather w1 # w1와 w2 두 테이블을 셀프 조인한다. join Weather w2 on datediff(w1.recordDate,w2.recordDate) = 1 # ON 절에서 ^위 조건을 사용하여 날짜 차이가 1일인 행들만 병합하도록 합니다. Where w1.temperature > w2.temperature # 두 온도 차 중에서 더 높은 온도를 조건 설정
LAG 함수 풀이
WITH WeatherWithLag AS ( SELECT id, recordDate, temperature, LAG(temperature) OVER (ORDER BY recordDate) AS previous_temp, LAG(recordDate) OVER (ORDER BY recordDate) AS previous_date FROM Weather /* LAG 함수로 recordDate기준 현재 행에서 이전 행을 불러오는 previous_temp,previous_date 작성*/ ) SELECT id FROM WeatherWithLag WHERE #현재 행과 LAG 함수로 불러들인 이전 행 차이로 조건 설정 DATEDIFF(recordDate, previous_date) = 1 AND temperature > previous_temp;
데카르트 곱
SELECT w2.id FROM Weather w1, Weather w2 #두 개 이상의 테이블을 조합하여 모든 가능한 순서쌍을 생성 WHERE DATEDIFF(w2.recordDate, w1.recordDate) = 1 AND w2.temperature > w1.temperature; # 성능상의 이슈를 유발할 수 있으므로, 가능하면 조인 조건을 명시