首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过分组获得最新的记录

通过分组获得最新的记录
EN

Stack Overflow用户
提问于 2013-06-29 12:58:15
回答 2查看 1.1K关注 0票数 1

我有一张表格叫做“结果”

代码语言:javascript
复制
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)?

例如,输入

代码语言:javascript
复制
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

我知道一个解决问题的方法。

代码语言:javascript
复制
(SELECT NAME SUBJECT YEAR MAX(YEAR) YEAR
FROM RESULTS WHERE NAME = 'MARK' AND SUBJECT ='MATH'
GROUP BY NAME SUBJECT YEAR) LATEST 

在IDN上把上面的表加入到同一个表中,我就可以得到结果。但这是双倍的工作。无论如何,我是否可以使用“最大(年份)”来获得相应的年份,使用“有条款”或其他什么?我需要2组的数据操作,一个最新的,并相应的合格身份。

PS :当然,在DB中有这样的100名候选人的记录。

更新:根据答案2,这个问题也被归类为greatest-n-per-group问题。有趣的是知道它是DB中的一个分类问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-29 13:04:39

在Oracle和Server中,您都可以使用分析/窗口函数级别()或ROW_NUMBER()来实现这一点:

代码语言:javascript
复制
select *
  from ( select a.*
              , rank() over ( partition by name, subject order by year desc ) rnk
           from ... a
                )
 where rnk = 1

namesubject的每个行返回1,ROW_NUMBER()将返回一个随机行。

仅在Oracle中,就可以使用保留提供相同的结果:

代码语言:javascript
复制
select name, subject, max(year) as year
     , max(qualified) keep (dense_rank first order by year desc) as qualified
  from ...
 group by name, subject
票数 3
EN

Stack Overflow用户

发布于 2013-06-29 17:41:47

这是最大n次群一直以来重新发明的问题。

代码语言:javascript
复制
SELECT t1.*
FROM RESULTS AS t1
LEFT JOIN RESULTS AS t2
  ON t1.NAME = t2.NAME AND t1.SUBJECT = t2.SUBJECT AND t1.YEAR < t2.YEAR
WHERE t2.NAME IS NULL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17380456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档