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):
希望大家多多交流指正!