仅获取连续最后一年的行

时间:2017-01-26 11:33:17

标签: mysql sql mysql-workbench

我有一个基本的表格,如下所示:

Original Table

我的目标是获取每个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

我的第一个合乎逻辑的步骤是与自己交叉,这让我知道了:

Crossed Table

现在我试图用不同的“WHERE”来获得特定的结果,但无法弄明白。

对于那些在没有显示任何内容之前连续几年的行,没关系。

2 个答案:

答案 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;