详解力扣高频SQL50题之197. 上升的温度【简单】

传送门: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)

解析

本题不难,但是有坑点:如果日期是连续的,那么用位移开窗函数lead()或lag()是方便的,但是这题没有说日期是连续的,所以用开窗函数不一定能通过。事实上,涉及同一列的值相互比较,要想到用自连接,这样就可以保证同一行的日期在另一张表中相差一天,即on 表1.date=表2.date-1,这样两张表就分为今天表和昨天表,那么只需判断今天表的温度是否大于昨天表即可,最后注意返回今天表的id。

算法(标准SQL)

自连接天气表,令表1的日期-1=表2的日期,这样表1就成为今天表,表2就成为昨天表,再判断表1的温度是否大于昨天表,最后返回表1的id即可。

代码(标准SQL)

sql 复制代码
select w1.id as id
from Weather w1
join Weather w2
on w1.recordDate-1=w2.recordDate
where w1.Temperature>w2.Temperature;
相关推荐
zone_z3 小时前
告别静态文档!Oracle交互式技术架构图让数据库学习“活“起来
数据库·学习·oracle
旧时光巷3 小时前
SQL基础⑭ | 变量、流程控制与游标篇
数据库·sql·学习·mysql·变量·游标·流程控制
尘土哥5 小时前
Mysql 索引下推(Index Condition Pushdown, ICP)详解
sql·mysql
某个默默无闻奋斗的人5 小时前
【矩阵专题】Leetcode48.旋转图像(Hot100)
java·算法·leetcode
Jacob02346 小时前
很多数据分析师写对了 SQL,却忽略了这件更重要的事
后端·sql·数据分析
种树达人6 小时前
数据库常用DDL语言
java·数据库·oracle
Gauss松鼠会6 小时前
华为云DRS实现Oracle到GaussDB数据库迁移的全流程技术方案
数据库·sql·安全·华为云·database·gaussdb
技术卷13 小时前
详解力扣高频SQL50题之1148. 文章浏览 I【入门】
sql·leetcode·oracle
某个默默无闻奋斗的人13 小时前
【矩阵专题】Leetcode54.螺旋矩阵(Hot100)
java·算法·leetcode
JXL186014 小时前
Leetcode-.42接雨水
算法·leetcode·职场和发展