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 子句:
- 按'ID'
分组
- 选择 MAX(年)
- 选择 MAX(Term)
问题是我需要将任期保留到相应的年份,而 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
);
维护更新日期列。使用此专栏,您可以实现任何目标。
使用学期制的学术术语将一年一分为二。
我从 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 子句:
- 按'ID' 分组
- 选择 MAX(年)
- 选择 MAX(Term)
问题是我需要将任期保留到相应的年份,而 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
);
维护更新日期列。使用此专栏,您可以实现任何目标。