我有一个表叫做结果是这样的:HAVING - GROUP BY获得的最新记录
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次操作,一次最新操作以及符合条件的合格状态。
PS:当然在DB中有100个这样的候选人的记录。
更新:此问题也被归类为最大的每组问题根据答案2.有趣的是知道它是DB中的分类问题。
谢谢!我跳过了关于分析/窗口功能的阅读......有人让我阅读。 – Nishant
但是,我的sublte问题是,我们是否可以使用聚合函数,然后根据group_by中包含的“其他”行中的值检索parm。 – Nishant
答案中的Oracle语法提供了您要求的@Nishant。尽管如此,你不能用SQL Server来做到这一点。 – Ben