SQL使用GROUP BY选择最新行

时间:2016-10-19 18:30:06

标签: sql greatest-n-per-group informix

使用学期制的学术术语将一年分为两年。

我从SQL查询得到以下结果,如上所述,该术语的值从1到2始终保持该特定术语的学生分数(ID):

 ID | Year | Term | Career | Score
-----------------------------------
 1  | 2015 |  2   |   70   | 3,25
 1  | 2015 |  1   |   70   | 3,58
 2  | 2015 |  1   |   71   | 4,05
 2  | 2014 |  2   |   71   | 4,17
 3  | 2012 |  2   |   70   | 3,88
 3  | 2012 |  1   |   70   | 4,23
 3  | 2011 |  2   |   70   | 4,78

我想为每个学生返回最后一个学期(年学期)的相应行,所以结果如下:

 ID | Year | Term | Career | Score
-----------------------------------
 1  | 2015 |  2   |   70   | 3,25
 2  | 2015 |  1   |   71   | 4,05
 3  | 2012 |  2   |   70   | 3,88

我正在利用具有以下特殊性的GROUP BY子句:

  • 按ID'
  • 分组
  • 选择MAX(年份)
  • 选择MAX(期限)

问题在于我需要将该术语保留到相应的年份,MAX(Term)子句是导致错误的子句。例如,使用我现在获得的查询,结果不正确,因为它将返回此行:

 ID | Year | Term | Career | Score
-----------------------------------
 2  | 2015 |  2   |   71   | 4,05

而不是这一个(这是正确的):

 ID | Year | Term | Career | Score
-----------------------------------
 2  | 2015 |  1   |   71   | 4,05

如何保持(年度)之间的对应关系?

提示:2015-2大于2015-1,2014-1大于2013-2。

2 个答案:

答案 0 :(得分:1)

维护更新日期列。使用此列,您可以实现任何目标。

答案 1 :(得分:0)

不幸的是,Informix不提供row_number()

以下是否有效?

select t.*
from t
where year || term = (select max(t2.year || t2.term)
                      from t t2
                      where t2.id = t.id
                     );