SQL实现LeetCode(197.上升温度)


Posted in MySQL onAugust 07, 2021

[LeetCode] 197.Rising Temperature 上升温度

Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to its previous (yesterday's) dates.

+---------+------------+------------------+
| Id(INT) | Date(DATE) | Temperature(INT) |
+---------+------------+------------------+
|       1 | 2015-01-01 |               10 |
|       2 | 2015-01-02 |               25 |
|       3 | 2015-01-03 |               20 |
|       4 | 2015-01-04 |               30 |
+---------+------------+------------------+

For example, return the following Ids for the above Weather table:

+----+
| Id |
+----+
|  2 |
|  4 |
+----+

这道题给了我们一个Weather表,让我们找出比前一天温度高的Id,由于Id的排列未必是按顺序的,所以我们要找前一天就得根据日期来找,我们可以使用MySQL的函数Datadiff来计算两个日期的差值,我们的限制条件是温度高且日期差1,参见代码如下: 

解法一:

SELECT w1.Id FROM Weather w1, Weather w2
WHERE w1.Temperature > w2.Temperature AND DATEDIFF(w1.Date, w2.Date) = 1;

下面这种解法我们使用了MySQL的TO_DAYS函数,用来将日期换算成天数,其余跟上面相同:

解法二:

SELECT w1.Id FROM Weather w1, Weather w2
WHERE w1.Temperature > w2.Temperature AND TO_DAYS(w1.Date) = TO_DAYS(w2.Date) + 1;

我们也可以使用Subdate函数,来实现日期减1,参见代码如下:

解法三:

SELECT w1.Id FROM Weather w1, Weather w2
WHERE w1.Temperature > w2.Temperature AND SUBDATE(w1.Date, 1) = w2.Date;

最后来一种完全不一样的解法,使用了两个变量pre_t和pre_d分别表示上一个温度和上一个日期,然后当前温度要大于上一温度,且日期差为1,满足上述两条件的话选出来为Id,否则为NULL,然后更新pre_t和pre_d为当前的值,最后选出的Id不为空即可:

解法四:

SELECT Id FROM (
SELECT CASE WHEN Temperature > @pre_t AND DATEDIFF(Date, @pre_d) = 1 THEN Id ELSE NULL END AS Id,
@pre_t := Temperature, @pre_d := Date 
FROM Weather, (SELECT @pre_t := NULL, @pre_d := NULL) AS init ORDER BY Date ASC
) id WHERE Id IS NOT NULL;

参考资料:

https://leetcode.com/discuss/33641/two-solutions

https://leetcode.com/discuss/52370/my-simple-solution-using-inner-join

https://leetcode.com/discuss/86435/a-simple-straightforward-solution-and-its-very-fast

到此这篇关于SQL实现LeetCode(197.上升温度)的文章就介绍到这了,更多相关SQL实现上升温度内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL infobright的安装步骤
Apr 07 MySQL
MySQL复制问题的三个参数分析
Apr 07 MySQL
mysql查询的控制语句图文详解
Apr 11 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 MySQL
DQL数据查询语句使用示例
Dec 24 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 #MySQL
MySQL Shell import_table数据导入的实现
Aug 07 #MySQL
MySQL配置主从服务器(一主多从)
SQL实现LeetCode(180.连续的数字)
Aug 04 #MySQL
Mysql中where与on的区别及何时使用详析
Aug 04 #MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 #MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 #MySQL
You might like
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python opencv实现证件照换底功能
2019/08/19 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
Python中Yield的基本用法
2020/10/18 Python
Django框架请求生命周期实现原理
2020/11/13 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
出国签证在职证明
2014/09/20 职场文书
写给老师的保证书
2015/05/09 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
关于开学的感想
2015/08/10 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android