LeetCode_Mysql_Rising Temperature

197. Rising Temperature

timu


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):

這裏寫圖片描述


希望大家多多交流指正!

發佈了54 篇原創文章 · 獲贊 26 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章