1. 程式人生 > >【LeetCode】197.上升的溫度

【LeetCode】197.上升的溫度

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;

方法二:下面這種解法我們使用了MySQLTO_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群找我解答。