题目
表: 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
测试结果