首页 > 数据库 >力扣197(MySQL)-上升的温度(简单)

力扣197(MySQL)-上升的温度(简单)

时间:2023-03-17 13:56:01浏览次数:52  
标签:Temperature 197 lag 力扣 w2 w1 MySQL recordDate id

题目:

表: Weather

编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。

返回结果 不要求顺序 。

查询结果格式如下例。

 解题思路:

方法一:使用窗口函数lag() over( partition by 分组列 order by 排序列) 和 datediff(startdate,endstart)

①先将recordDate和Temperature列向下移动一行,并将日期进行升序排序。

1 SELECT id, recordDate, Temperature, 
2     lag(recordDate, 1) over(order by recordDate) AS beforeDate,
3     lag(Temperature,1) over(ORDER BY recordDate ) AS beforeTemperature
4 FROM weather 

 ②然后再用第一步查找出来的结果作为临时表,来筛选出两个连续日期(差值为1)和后一天温度比前一天高的id。

1 SELECT id
2 FROM
3     ( SELECT id, recordDate, Temperature, 
4     lag(recordDate, 1) over(order by recordDate) AS beforeDate,
5     lag(Temperature,1) over(ORDER BY recordDate ) AS beforeTemperature
6     FROM weather ) as a
7 where Temperature > beforeTemperature and datediff( recordDate,beforeDate) = 1;    

 方法二:笛卡尔积:假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

将weather表进行自连接,分别将别名设置为w1,w2,连接条件是:w2的日期与w1的日期差1 且 w2的温度比w1的温度大。

1 select w2.id
2 from Weather w1
3 join Weather w2
4 where datediff(w2.recordDate, w1.recordDate) = 1 
5 and w2.Temperature > w1.Temperature;

小知识:

①lag()和head()【图片来源

lag():我理解为向下移动x行

 head():我理解为向上移动x行

 ②detediff(datepart,startdate.endddate):返回enddate-startdate的值。

1 select datediff(year,'2018-07-13','2018-07-14');--output:1
2 select datediff(year,'2018-07-14','2018-07-13');--output:-1

③LEFT JOIN 和RIGHT JOIN需要用ON,INNER JOIN可以用WHERE,INNER JOIN可以省略不写,直接用逗号隔开两个表。

标签:Temperature,197,lag,力扣,w2,w1,MySQL,recordDate,id
From: https://www.cnblogs.com/liu-myu/p/17226484.html

相关文章

  • mysql select @params:= 的问题
    1、创建班级表createtableclass(idintprimarykeyauto_increment,titlevarchar(50))2、添加测试数据insertintoclassvalues(null,'小班'),(nul......
  • MySQL错误:Access denied for user 'root'@'%' to database 'xxx'
    本篇记录了我在遇到该问题,解决该问题的全部过程,相信自己,还是很强大的,希望对遇到相似问题的网友有所帮助~本人Linux服务器,Centos7版本,Mysql5.7.14。。。最初问题:使用N......
  • mysql不同版本的功能差异
    概述mysql不同版本的功能差异介绍mysql的官网下载地址http://dev.mysql.com/downloads/MySQLCommunityServer(社区版)社区版本,免费,但是Mysql不提供官方技术支持......
  • 力扣196(MySQL)-删除重复的电子邮箱(简单)
    题目:表: Person编写一个SQL删除语句来删除所有重复的电子邮件,只保留一个id最小的唯一电子邮件。以任意顺序返回结果表。(注意:仅需要写删除语句,将自动对剩余结......
  • MySql生成ER【StarUML】文件
    1.背景要画ER图,一个个打费时费力,StarUML文件打开是json。那么就有可能自动生成。2.效果把表结构生成好,自己只要维护关系即可。3.代码importlombok.Data;import......
  • 力扣---2488. 统计中位数为 K 的子数组
    给你一个长度为n的数组nums,该数组由从1到n的不同整数组成。另给你一个正整数k。统计并返回nums中的中位数等于k的非空子数组的数目。注意:   数组的......
  • 【项目实战】基于Python+Django+MySQL的自行车租赁系统(附完整源码)
    1、项目说明基于python+Django+Mysql的自行车租赁系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据......
  • 【项目实战】基于Python+Django+MySQL的在线投票系统(附完整源码)
    1、项目说明基于Python+Django+Mysql在线投票系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据库数......
  • 【项目实战】基于Python+Django+MySQL的个人博客系统(附完整源码)
    1、项目说明基于python+Django+Mysql的个人博客系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据库......
  • Mysql
    1.为什么要使用数据库持久化:把数据保存到可掉电式存储设备中已供之后使用,数据持久化意味着将内存中的数据保存到硬盘上加以固化。持久化的作用:将内存中的数据存储在关系......