LeetCode: 197. 上升的温度
上升的温度
原题
表: Weather
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id 是该表具有唯一值的列。
没有具有相同 recordDate 的不同行。
该表包含特定日期的温度信息
编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id
。
返回结果 无顺序要求 。
结果格式如下例子所示。
示例 1:
输入:
Weather 表:
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+----+------------+-------------+
输出:
+----+
| id |
+----+
| 2 |
| 4 |
+----+
解释:
2015-01-02 的温度比前一天高(10 -> 25)
2015-01-04 的温度比前一天高(20 -> 30)
解题思路
创建表的自连接来比较相邻日期的温度:
SELECT *
FROM Weather AS w1, Weather AS w2
w1.id | w1.recordDate | w1.temperature | w2.id | w2.recordDate | w2.temperature |
---|---|---|---|---|---|
4 | 2015-01-04 | 30 | 1 | 2015-01-01 | 10 |
3 | 2015-01-03 | 20 | 1 | 2015-01-01 | 10 |
2 | 2015-01-02 | 25 | 1 | 2015-01-01 | 10 |
1 | 2015-01-01 | 10 | 1 | 2015-01-01 | 10 |
4 | 2015-01-04 | 30 | 2 | 2015-01-02 | 25 |
3 | 2015-01-03 | 20 | 2 | 2015-01-02 | 25 |
2 | 2015-01-02 | 25 | 2 | 2015-01-02 | 25 |
1 | 2015-01-01 | 10 | 2 | 2015-01-02 | 25 |
… |
代码示例
SELECT w1.id
FROM Weather AS w1, Weather AS w2
WHERE DATEDIFF(w1.recordDate, w2.recordDate) = 1 AND
w1.Temperature > w2.Temperature;
说明
DATEDIFF()
和 TIMESTAMPDIFF()
-
DATEDIFF()
用于计算两个日期之间差异,语法为:DATEDIFF(end_date, start_date)
返回的结果是
end_date - start_date
,如DATEDIFF('2024-09-15', '2024-09-01')
值为 14。 -
TIMESTAMPDIFF()
返回两个时间戳之间的差值,语法如下:TIMESTAMPDIFF(unit, datetime1, datetime2)
unit
: 指定时间单位,如年(YEAR)、月(MONTH)、日(DAY)、小时(HOUR)、分钟(MINUTE)、秒(SECOND)等。
如 TIMESTAMPDIFF(DAY, '2023-09-01', '2023-09-15')
值为 14。
- 使用时需注意正负差值,例如
TIMESTAMPDIFF()
函数,datetime1
晚于datetime2
,结果为负数,DATEDIFF()
函数则反之。