SQL 使用 GROUP BY 选择最新行

SQL Selecting the latest row using GROUP BY

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

我从 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

我想 return 每个学生最近学期(年学期)的相应行,所以结果看起来像:

 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 子句:

问题是我需要将任期保留到相应的年份,而 MAX(Term) 条款是导致错误的原因。例如,使用我现在得到的查询,结果不正确,因为它会 return 这一行:

 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。

遗憾的是,Informix 不提供 row_number()

以下是否有效?

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

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