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 13 MySQL
Mysql 用户权限管理实现
May 25 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MySql数据库 查询时间序列间隔
May 11 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL count(*)统计总数问题汇总
Sep 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
解析PHP 5.5 新特性
2013/07/02 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Python类的继承用法示例
2019/01/31 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
指针和引用有什么区别
2013/01/13 面试题
畜牧兽医本科生的自我评价
2014/03/03 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
爱祖国演讲稿
2014/05/04 职场文书
入党个人总结范文
2015/03/02 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers