【LeetCode 簡單題】50-上升的溫度
阿新 • • 發佈:2018-11-04
宣告:
今天是第50道題。給定一個 Weather
表,編寫一個 SQL 查詢,來查詢與之前(昨天的)日期相比溫度更高的所有日期的 Id。以下所有程式碼經過樓主驗證都能在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 | +----+
解法1。兩表直接關聯,用where篩選日期差1天,溫度更高的樣本Id,還有to_days()函式的用法,耗時540 ms, 在Rising Temperature的MySQL提交中擊敗了74.45% 的使用者,程式碼如下。
- to_days(date):給出一個日期date,返回一個天數(從公元0年的天數);
select w1.Id from Weather w1, Weather w2 where to_days(w1.RecordDate) - to_days(w2.RecordDate) = 1 and w1.Temperature > w2.Temperature
解法2。兩表直接關聯,用where篩選日期差1天,溫度更高的樣本Id,還有datediff()函式的用法,耗時497 ms, 在Rising Temperature的MySQL提交中擊敗了84.89% 的使用者,程式碼如下。
select w1.Id from Weather w1, Weather w2 where datediff(w1.RecordDate, w2.RecordDate) = 1 and w1.Temperature = w2.Temperature
解法3。兩表直接關聯,用where篩選日期差1天,溫度更高的樣本Id,還有subdate()函式的用法,耗時644 ms, 在Rising Temperature的MySQL提交中擊敗了51.93% 的使用者,程式碼如下。
select w1.Id from Weather w1, Weather w2 where subdate(w1.RecordDate,1) = w2.RecordDate and w1.Temperature > w2.Temperature
結尾
解法1、解法2、解法3:https://blog.csdn.net/wal1314520/article/details/80115738