题目:
表 Weather,找到所有温度比前一天高的日期Id。
Id(INT)Date(DATE)Temperature(INT)
12015-01-011022015-01-022532015-01-032042015-01-0430
例,输出结果为:
Id
24
解析:
只有一个表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和当天的温度与前一天的温度组成一张表,最后接上后一天比前一天温度高的检索条件就可以了。