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索引篇之千万级数据实战测试
Apr 05 MySQL
Mysql 如何批量插入数据
Apr 06 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
mysql 排序失效
May 20 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
SQL Server数据库的三种创建方法汇总
May 08 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
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
php中stdClass的用法分析
2015/02/27 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
前端深入理解Typescript泛型概念
2020/03/09 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
python连接mongodb密码认证实例
2018/10/16 Python
用 Python 制作地球仪的方法
2020/04/24 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
建龙钢铁面试总结
2014/04/15 面试题
大学生自荐信
2013/12/11 职场文书
九年级历史教学反思
2014/01/27 职场文书
白酒营销策划方案
2014/08/17 职场文书
暑假学习心得体会
2014/09/02 职场文书
社保转移委托书范本
2014/10/08 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle