标签:
1、题目名称
Rising Temperature(上浮的温度)
2、题目地址
https://leetcode.com/problems/rising-temperature
3、题目内容
给出一组每日的气温数据,返回当日气温高于昨日气温的日期。
例如,Weather表中的数据如下:
+---------+------------+------------------+ | 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 | +---------+------------+------------------+
则返回结果应为:
+----+ | Id | +----+ | 2 | | 4 | +----+
4、初始化数据库脚本
在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);
5、解题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
LeetCode:Rising Temperature - 上浮的温度
标签:
原文地址:http://my.oschina.net/Tsybius2014/blog/493320