SQL-每日一题【197.上升的温度】

题目

表: Weather

编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。

返回结果 不要求顺序 。

查询结果格式如下例。

示例 1:

解题思路

前置知识

交叉连接(CROSS JOIN)

即笛卡尔积,它会将左右两张需要连接的表进行组合。例如,左表有200行,右表有100行,则交叉连接的结果有200*100行,即2000行

语法格式

SELECT * FROM table1 CROSS JOIN table2;

使用交叉连接会将两个表中所有的数据两两组合

举个栗子:我们对students表进行交叉连接

连接前:

SELECT *
FROM students AS s1 CROSS JOIN students AS s2;

 连接后

DATEDIFF( ,)函数

DATEDIFF函数用于返回两个日期的天数

语法格式

DATEDIFF(date1,date2)
参数说明

date1: 比较日期1

date2: 比较日期2

DATEDIFF函数返回date1 - date2的计算结果,date1和date2两个参数需是有效的日期或日期时间值;如果参数传递的是日期时间值,DATEDIFF函数仅将日期部分用于计算,并忽略时间部分(只有值的日期部分参与计算)

举个栗子:

-- 1
SELECT DATEDIFF('2022-04-30','2022-04-29');
-- 0
SELECT DATEDIFF('2022-04-30','2022-04-30');
-- -1
SELECT DATEDIFF('2022-04-29','2022-04-30');
 
-- 0
SELECT DATEDIFF('2022-04-30','2022-04-30 14:00:00');
-- 1
SELECT DATEDIFF('2022-04-30 13:00:00','2022-04-29 14:00:00');
-- 10
SELECT DATEDIFF('2017-06-25 09:34:21', '2017-06-15');

1.题目要求我们求出后一天温度比前一天温度更高的日期id,我们首先对Weather表与自身进行交叉连接(Weather as a join Weather as b)

2.交叉连接后我们要筛选出左表日期是右表日期的下一天即可,这个时候我们就用到了datediff(date1, date2)函数(datediff(a.recordDate,b.recordDate)=1)

3.最后我们筛选出下一天比前一天气温更高的数据(a.Temperature > b.Temperature)

代码实现

select a.id from
Weather as a join Weather as b
on datediff(a.recordDate,b.recordDate)=1
where a.Temperature > b.Temperature

测试结果

猜你喜欢

转载自blog.csdn.net/lucky_1314520/article/details/131528312