我有一个基本的表格,如下所示:
我的目标是获取每个course_name和年份之间的差异,它的速率和相同course_name的速率之间的差异是在它之前的最后一年。
例如:
course_name = hedva1
year = 2016
我希望得到:
course_name = hedva1
year = 2016
rate = 9.50000 - 4.0000 = 5.50000
并且:
course_name = hedva1
year = 2015
我希望得到:
course_name = hedva1
year = 2015
rate = 4.0000 - 2.0000 = 2.0000
我的第一个合乎逻辑的步骤是与自己交叉,这让我知道了:
现在我试图用不同的“WHERE”来获得特定的结果,但无法弄明白。
对于那些在没有显示任何内容之前连续几年的行,没关系。
答案 0 :(得分:0)
获取先前值的一种方法是相关子查询:
select t.*,
(select t2.rate_avg
from t t2
where t2.course = t.course and t2.year < t.year
order by t2.year desc
limit 1
) as prev_rate_avg
from t;
答案的其余部分只是算术。
答案 1 :(得分:0)
您不必交叉加入,因为您已经知道要加入的候选记录:相同的course_name,较小的年份。因此,内部联接,按发现的年份排序,将结果限制为一行。
select
ynow.course_name,
ynow.year,
ynow.rate_avg,
yold.year,
yold.rate_avg,
ynow.rate_avg - yold.rate_avg as rate
from mytable ynow
join mytable yold where yold.course_name = ynow.course_name and yold.year < ynow.year
where ynow.course_name = 'hedva1'
and ynow.year = 2016
order by yold.year desc
limit 1;