197. Rising Temperature
1. 问题描述:
从 Weather 表中,写sql语句获取比昨天温度高的日期id。
2. 解决思路:
两种方式:第一种是对表进行普通查询;第二种是基于过程并用户自定义变量,让表order by Date asc,然后对天数相差1,取出后一天高于前一天温度的id即可。用户定义变量的方式需要主要两点,一个是变量的初始化, 另一个是变量每次查询后的赋值。
3. sql语句:
3.1 普通查询:
select w1.Id from Weather w1, Weather w2
where w1.Temperature>w2.Temperature
and DATEDIFF(w1.Date,w2.Date)=1 -- 也可以写成and TO_DAYS(w1.Date)-TO_DAYS(w2.Date)=1
3.2 使用用户自定义变量:
select Id from
(
select case
when Temperature > @prevTemp and DATEDIFF(Date, @prevDate) = 1 Then Id Else NULL end as Id,
@prevTemp := Temperature,
@prevDate := Date
from (select * from weather order by Date ASC) w, (select @prevTemp:=NULL, @prevDate:=NULL) init
) d where Id is not NULL;
4. 运行时间:
4.1 普通查询( 1105ms):
4.1 使用用户自定义变量( 937ms):
希望大家多多交流指正!