197、上升的温度--leetcode

题目描述

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

+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
|       1 |       2015-01-01 |               10 |
|       2 |       2015-01-02 |               25 |
|       3 |       2015-01-03 |               20 |
|       4 |       2015-01-04 |               30 |
+---------+------------------+------------------+

例如,根据上述给定的Weather 表格,返回如下 Id:

+----+
| Id |
+----+
|  2 |
|  4 |
+----+

算法设计与分析:
本题主要考查joinDATEDIFF子句的使用,后者的意思明显就是:日期差异
由于个人少用DATEDIFF子句,所以这里写一写它的用法:

在MySQL中经常使用DATEDIFF来比较两个日期的类型的值。在Oracle里面没有。

DATEDIFF()函数的具体原理如下:

# 计算给出的日期的差值
DATEDIFF('2019-7-31','2019-8-1'); # 前-后-->-1
DATEDIFF('2019-8-2','2019-8-1'); # 前-后-->1

根据题意可以知道,待查查询的满足条件有两个:

  • 1、与前面的日期的差值为1
  • 2、比前面一天的温度高

使用join和datediff子句:

select 
    a.Id 
from  
    Weather as a  # 不加as的话效率会变慢
join 
    Weather as b 
on 
    a.Temperature > b.Temperature 
and 
    dateDiff(a.RecordDate,b.RecordDate) = 1

取一个别名的情况:

SELECT
    Weather.Id
FROM
    Weather
JOIN
    Weather as w 
ON 
    DATEDIFF(Weather.RecordDate, w.RecordDate) = 1
AND 
    Weather.Temperature > w.Temperature
;

使用where的情况:

# Write your MySQL query statement below

SELECT
    a.Id
FROM
    Weather as a,
    Weather as b 
where
    DATEDIFF(a.RecordDate, b.RecordDate) = 1
AND 
    a.Temperature > b.Temperature
;

总结:

  • 1、不同其他的编程语言,sql值的判断直接使用=
  • 2、Weather as a # 不加as的话效率会变慢
  • 3、join和on搭配
  • 4、where单独使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值