详解力扣高频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;
相关推荐
码农-0046 小时前
Springboot 集成 Ehcache操作数据库显示SQL语句设置
数据库·spring boot·sql
oradh6 小时前
Oracle 执行计划的阅读方法(二叉树结构来理解和阅读)
数据库·oracle·执行计划的阅读方法
钱栈up6 小时前
全量 21 个失败、单跑全绿:泄漏进连接池的 SQL 变量
sql·单元测试·测试
旺仔不是程序员6 小时前
pg_trgm GIN 索引:PostgreSQL 正则、模糊与近似度查询的三合一加速器
数据库·后端·sql
考虑考虑6 小时前
SQL中的 CASE WHEN
数据库·后端·sql
旺仔不是程序员6 小时前
索引膨胀与重建:PostgreSQL REINDEX 生产实践
数据库·后端·sql
旖旎夜光6 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
漂着的圆木6 天前
Agent 功能参与度:Copilot 怎么算
sql·数据分析·agent·githubcopilot·度量
lbb 小魔仙6 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
CoderYanger6 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法