1. 程式人生 > >【LeetCode 簡單題】50-上升的溫度

【LeetCode 簡單題】50-上升的溫度

宣告:

今天是第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