题目:
表 Weather
,找到所有温度比前一天高的日期Id。
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 |
解析:
只有一个表weather
,因此一张表内部的联系(日期的前后联系),通常处理方法就是做一次表的自连接。
但是这里与以往的连接不同,在于这里的Date
需要类似于a.data-1(day)=b.data
。即日期的减法(前一天)。因此正确写法如下:
select dayafter.id
from weather
join weather as dayafter
on date_sub(dayafter.date,interval 1 day)=weather.date
and weather.Temperature<dayafter.Temperature
其中date_sub(dayafter.date,interval 1 day)
代表了dayafter.date
的前一天。将某一天的Id和当天的温度与前一天的温度组成一张表,最后接上后一天比前一天温度高的检索条件就可以了。