【LeetCode】197.上升的溫度
阿新 • • 發佈:2019-02-03
197.上升的溫度
給定一個Weather
表,編寫一個SQL查詢來查詢與之前(昨天的)日期相比溫度更高的所有日期的id。用到的表和資料SQL:
-- ---------------------------- -- Table structure for `weather` -- ---------------------------- DROP TABLE IF EXISTS `weather`; CREATE TABLE `weather` ( `Id` int(11) DEFAULT NULL, `RecordDate` date DEFAULT NULL, `Temperature` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Records of weather -- ---------------------------- INSERT INTO `weather` VALUES ('1','2015-01-01', '10'); INSERT INTO `weather` VALUES ('2','2015-01-02', '25'); INSERT INTO `weather` VALUES ('3','2015-01-03', '20'); INSERT INTO `weather` VALUES ('4','2015-01-04', '30');
答案:
方法一:我們可以使用MySQL的函式Datadiff來計算兩個日期的差值,我們的限制條件是溫度高且日期差1,參見程式碼如下:
select w1.Id from weather w1
inner join weather w2 on w1.Temperature > w2.Temperature and DATEDIFF(w1.RecordDate, w2.RecordDate) = 1;
方法二:下面這種解法我們使用了MySQL的TO_DAYS函式,用來將日期換算成天數,其餘跟上面相同:
SELECT w1.Id FROM Weather w1, Weather w2 WHERE w1.Temperature > w2.Temperature AND TO_DAYS(w1.RecordDate)=TO_DAYS(w2.RecordDate) + 1;
解法三:我們也可以使用Subdate函式,來實現日期減1,參見程式碼如下:、
SELECT w1.Id FROM Weather w1, Weather w2
WHERE w1.Temperature > w2.Temperature AND SUBDATE(w1.RecordDate, 1) = w2.RecordDate;
寫的比較粗糙,有不理解的可以掃描二維碼加QQ群找我解答。