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 相关文章推荐
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
MySQL时间设置注意事项的深入总结
May 06 MySQL
MySQL查询学习之基础查询操作
May 08 MySQL
为什么mysql字段要使用NOT NULL
May 13 MySQL
MySQL大小写敏感的注意事项
May 24 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL修改默认引擎和字符集详情
Sep 25 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
mysql insert 存在即不插入语法说明
Mar 25 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 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 表单提交给自己
2008/07/24 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
javascript实现数独解法
2015/03/14 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python学习思维导图(必看篇)
2017/06/26 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
广告公司文案策划岗位职责
2015/04/14 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL