我有一个名为 RESULTS 的表,如下所示:
RESULTS_IDN NAME SUBJECT YEAR QUALIFIED
1 MARK ENGLISH 1989 N
3 MARK ENGLISH 1991 N
5 MARK ENGLISH 1993 Y
7 MARK ENGLISH 1995 N
2 MARK MATH 1990 N
5 MARK MATH 1993 N
6 MARK MATH 1995 Y
4 MARK SCIENCE 1991 N
9 MARK SCIENCE 1997 Y
我需要知道他写的最新考试的主题的候选人的资格状态,我如何为此编写查询(ORACLE/MSSQL)?
例如输入
NAME,SUBJECT OUTPUT NAME IDN SUBJECT YEAR Q
MARK,ENGLISH OUTPUT MARK 7 ENGLISH 1995 N
MARK SCIENCE OUTPUT MARK 9 SCIENCE 1997 Y
MARK MATH OUTPUT MARK 6 MATH 1995 Y
我知道解决这个问题的一种方法。
(SELECT NAME SUBJECT YEAR MAX(YEAR) YEAR
FROM RESULTS WHERE NAME = 'MARK' AND SUBJECT ='MATH'
GROUP BY NAME SUBJECT YEAR) LATEST
将 IDN 上的上表加入到同一个表中,我可以得到结果。但这是双重工作。无论如何,我可以使用 HAVING CLAUSE 或其他方式获得 MAX(YEAR) 并获得相应的年份吗?我需要对 GROUP BY 数据进行 2 次操作,一个最新的,以及对应的 Qualified 状态。
PS:当然数据库中有100个这样的候选人的记录。
更新:根据答案 2,这个问题也被归类为 每组最大 n 个问题。有趣的是,它是 DB 中的一个分类问题。