练习了leetcode中高频 SQL 50 题(基础版)的连接题目,共九道题目,整体难度低,适合初学者。
197 上升的温度
题目
表: weather +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | recordDate | date | | temperature | int | +---------------+---------+ 在 SQL 中,id 是该表的主键。 该表包含特定日期的温度信息。找出与之前(昨天的)日期相比温度更高的所有日期的
id
。返回结果 无顺序要求 。
思路
本题要求查询比前一天温度更高的id,需要将表weather进行自连接。⚠️注意recordDate数据类型为date,而不是int类型。
查询的条件有2个:某一天的温度比另一天高,且某一天为另一天的后一天。
示例
输入: 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 | +----+
实现代码
select x.id
from Weather x, Weather y
# 错误代码 where x.Temperature > y.Temperature and x.recordDate = y.recordDate + 1
where x.Temperature > y.Temperature and datediff(x.recordDate , y.recordDate) = 1
在实现时遇到一些问题,代码逻辑本身没有问题,但是有一个数据集运行错误,考虑是数据类型date需要使用特定的日期比较方法。
于是搜索了相关资料,比较日期,使用DATEDIFF函数可以根据指定的日期部分返回两个日期之间的差异。如,本题使用DATEDIFF ( x.recordDate, y.recordDate ) = 1。