LeetCode:Rising Temperature - 上浮的溫度

一、題目名稱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

相關文章
相關標籤/搜索