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 Threads_running飙升与慢查询的相关问题解决
May 08 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
Mysql数据库命令大全
May 26 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
MySQL 语句执行顺序举例解析
Jun 05 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
postgresql如何找到表中重复数据的行并删除
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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
Yii分页用法实例详解
2014/12/04 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
JScript实现地址选择功能
2017/08/15 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
从0开始的Python学习016异常
2019/04/08 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
python实现的config文件读写功能示例
2019/09/24 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
python基于openpyxl生成excel文件
2020/12/23 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
大学生活动策划方案
2014/02/10 职场文书
申请任职学生会干部自荐书范文
2014/02/13 职场文书
呐喊读书笔记
2015/06/30 职场文书
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers