一、題目名稱sql
Rising Temperature(上浮的溫度)數據庫
二、題目地址函數
https://leetcode.com/problems/rising-temperature命令行
三、題目內容code
給出一組每日的氣溫數據,返回當日氣溫高於昨日氣溫的日期。leetcode
例如,Weather表中的數據以下:get
+---------+------------+------------------+ | Id(INT) | Date(DATE) | Temperature(INT) | +---------+------------+------------------+ | 1 | 2015-01-01 | 10 | | 2 | 2015-01-02 | 25 | | 3 | 2015-01-03 | 20 | | 4 | 2015-01-04 | 30 | +---------+------------+------------------+
則返回結果應爲:class
+----+ | Id | +----+ | 2 | | 4 | +----+
四、初始化數據庫腳本im
在MySQL數據庫中創建一個名爲LEETCODE的數據庫,用MySQL命令行中的source命令執行下面腳本:數據
-- 執行腳本前必須創建名爲LEETCODE的DATABASE USE LEETCODE; DROP TABLE IF EXISTS Weather; CREATE TABLE Weather ( Id INT NOT NULL PRIMARY KEY, Date DATE, Temperature INT ); INSERT INTO Weather (Id, Date, Temperature) VALUES (1, '2015-01-01', 10); INSERT INTO Weather (Id, Date, Temperature) VALUES (2, '2015-01-02', 25); INSERT INTO Weather (Id, Date, Temperature) VALUES (3, '2015-01-03', 20); INSERT INTO Weather (Id, Date, Temperature) VALUES (4, '2015-01-04', 30); INSERT INTO Weather (Id, Date, Temperature) VALUES (5, '1998-10-31', 29); INSERT INTO Weather (Id, Date, Temperature) VALUES (6, '1998-11-01', 30);
五、解題SQL
在給出正確的解題SQL語句前,先給出一種錯誤的寫法,即:
SELECT W2.Id FROM Weather W1, Weather W2 WHERE W1.Date = W2.Date - 1 AND W1.Temperature < W2.Temperature;
這種寫法錯誤的緣由是Date類型的數據減一後並不能得出正確的結果,例如1998年11月1日減一後的結果是19981100,而不是咱們所但願看到的1998年10月31日:
正確的寫法應該是使用DATEDIFF函數解決日期的增減問題,下面兩種寫法是能夠AC的寫法:
1)寫法1
SELECT W2.Id FROM Weather W1, Weather W2 WHERE DATEDIFF(W2.Date, W1.Date) = 1 AND W1.Temperature < W2.Temperature;
2)寫法2
SELECT W2.Id FROM Weather W1 JOIN Weather W2 ON DATEDIFF(W2.Date, W1.Date) = 1 WHERE W1.Temperature < W2.Temperature
END