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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL 分组查询的优化方法
May 12 MySQL
mysql 8.0.24 安装配置方法图文教程
May 12 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
Apr 10 MySQL
MySQL库表太大怎么办? 数据库分库分表项目实践
Apr 11 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
mysql数据库实现设置字段长度
Jun 10 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/01/12 PHP
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
基于require.js的使用(实例讲解)
2017/09/07 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
pandas 时间格式转换的实现
2019/07/06 Python
python selenium循环登陆网站的实现
2019/11/04 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
学生保证书范文
2014/04/28 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
老兵退伍标语
2014/10/07 职场文书
打架检讨书
2015/01/27 职场文书
Django如何与Ajax交互
2021/04/29 Python
基于angular实现树形二级表格
2021/10/16 Javascript
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js