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事务的隔离级别与MVCC
Apr 22 MySQL
解决MySQL存储时间出现不一致的问题
Apr 28 MySQL
详解MySQL的Seconds_Behind_Master
May 18 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
MySQL数据库超时设置配置的方法实例
Oct 15 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
mysql中数据库覆盖导入的几种方式总结
Mar 25 MySQL
mysqldump进行数据备份详解
Jul 15 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
canvas时钟效果
2017/02/16 Javascript
原生js实现放大镜
2017/02/20 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python 绘制可视化折线图
2020/07/22 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
一套SQL笔试题
2016/08/14 面试题
管理站站长岗位职责
2013/11/27 职场文书
中学生自我评价范文
2014/02/08 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
户外活动策划方案
2014/03/12 职场文书
感谢信范文大全
2015/01/23 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers