알고리즘

[SQL] 197. Rising Temperature (EASY)

파뱁 2025. 1. 20. 13:45
728x90

https://leetcode.com/problems/rising-temperature/description/?envType=study-plan-v2&envId=top-sql-50

⬆️ 문제 전문은 해당 링크에서 확인 가능함다

 

Table: Weather

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| recordDate    | date    |
| temperature   | int     |
+---------------+---------+
id is the column with unique values for this table.
There are no different rows with the same recordDate.
This table contains information about the temperature on a certain day.
 

Write a solution to find all dates id with higher temperatures compared to its previous dates (yesterday).

Return the result table in any order.

The 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).

 

전일자 보다 다음날짜의 온도 가 올라가면 해당 id를 뽑아내는 문제로

하나의 테이블로 셀프 조인을 이용해서 구하는 문제이다.

 

셀프 조인을 이용하기 때문에 하나의 테이블에 각각의 별칭, 총 두 개를 붙여 서로 다른 테이블 처럼 쓰면 되는데

이 문제에 대한 나의 답은 다음과 같다.

(ORACLE 기준 해답)

select t.id
from Weather t inner join Weather y on t.recordDate - y.recordDate = 1
where t.temperature > y.temperature;

 

t 테이블이 오늘, y 테이블이 어제라고 하면

어제의 날짜에 + 1을 해서 오늘날짜로 만든 후 온도를 비교 했을때 어제가 오늘 보다 낮으면 (오늘이 내일보다 높으면)

해당하는 row라고 판단 하고 id를 뽑아내면 된다.

728x90
반응형