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对于模糊查询like的一些汇总
May 09 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
MySQL 如何分析查询性能
May 12 MySQL
为什么mysql字段要使用NOT NULL
May 13 MySQL
mysql事务隔离级别详情
Oct 24 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
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 Framework教程之配置文件application.ini解析
2016/03/10 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
js实现表格字段排序
2014/02/19 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
javascript如何实现create方法
2019/11/04 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
2014/03/31 HTML / CSS
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
优良学风班申请材料
2014/02/13 职场文书
投标保密承诺书
2014/05/19 职场文书
计算机求职信
2014/07/02 职场文书
先进个人自荐书
2015/03/06 职场文书