리트코드 EASY 레벨 거의 다 풀고 이제 빠르게 풀 수 있는 문제가 없어진 것
+ 너무 바빠서 일주일간 SQL 안했더니 너무 감 떨어지는 것 같아서 다시 열심히 해보려한다 !
친구 말로는 코딩은 안하면 진짜 금방 까먹는다고 하는데, 일주일만 놔도 문제 보는데 너무 혼란스러워서
ㅋㅋㅋㅋ 앞으로는 열심히 해야겠다고 느꼈다 아자뵤 ! 하지만 시작하자마자 난관에 봉착...틀린 문제를 리뷰 해보자
197. Rising Temperature 문제는 아래와 같다.
Table: Weather
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id is the primary key for this table.
This table contains information about the temperature on a certain day.
Write an SQL query to find all dates' Id with higher temperatures compared to its previous dates (yesterday).
Return the result table in any order.
The query result format is in the following example.
Example 1:
Input:
Weather table:
+----+------------+-------------+
| id | recordDate | temperature |
+----+------------+-------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+----+------------+-------------+
Output:
+----+
| id |
+----+
| 2 |
| 4 |
+----+
Explanation:
In 2015-01-02, the temperature was higher than the previous day (10 -> 25).
In 2015-01-04, the temperature was higher than the previous day (20 -> 30).
SQL에서는 날짜가 숫자로 인지된다고 알고 있어서 아래와 같이 recordDate에 +1 하는 방법으로 진행 했었는데
Example 1에서는 정답인데 13번 예제에서 오류가 나서 이유를 찾아야 했다.
생각해보니 30일이나 31일의 경우 그 다음 달로 넘어가야했고 이 경우에는 카운팅이 어려운 상황이 발생하게 된다.
이를 극복하기 위해서 날짜 간 차를 구할 수 있는 DATEDIFF 함수를 사용하기로 했고, 성공했다 !
SELECT A.id AS Id
FROM Weather A
JOIN Weather B ON datediff(a.recordDate, b.recordDate) = 1
WHERE A.temperature > B.temperature
테이블이 하나일 때 날짜간 비교를 통해 정답을 구하는 문제에서는 DATEDIFF를 애용해보자 💗