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 数据类型选择原则
May 27 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
mysql定时自动备份数据库的方法步骤
Jul 07 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 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
PHP简洁函数小结
2011/08/12 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
Convert Seconds To Hours
2007/06/16 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
js实现3D旋转相册
2020/08/02 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
Python字符串格式化
2015/06/15 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
python统计中文字符数量的两种方法
2019/01/31 Python
对python中的装包与解包实例详解
2019/08/24 Python
python 实现让字典的value 成为列表
2019/12/16 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
销售经理工作职责
2014/02/03 职场文书
保护环境建议书400字
2014/05/13 职场文书
师德师风学习材料
2014/12/19 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python