首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL中查找一系列行的最新日期

在SQL中查找一系列行的最新日期
EN

Stack Overflow用户
提问于 2020-01-11 04:24:44
回答 2查看 82关注 0票数 0

我有一个课程作业分数表,上面有表的标题:

模块代码、课程号、学生、提交日期、分数

表标题顺序的示例数据:

数学,1,帕里,12-JUN-92,20

数学,2,帕里,13-JUN-92,20

数学,2,帕里,15-JUN-92,25

查询后期望的数据

数学,1,帕里,12-JUN-92,20

数学,2,帕里,15-JUN-92,25

有时,一个学生重新参加考试,他们有额外的一排课程作业。我只需要试着把最新的课程作业放在表格里。当我隔离一个特定的学生时,下面的方法是有效的:

代码语言:javascript
复制
SELECT * 
FROM TABLE
WHERE NAME = ‘NAME’
AND DATE IN (SELECT MAX(DATE)
            FROM TABLE 
            WHERE NAME = ‘NAME’
            GROUP BY MODULE_CODE, COURSEWORK_NUMBER, STUDENT)

这为该人员提供了正确的解决方案,为我提供了表中每一行(每个课程作业)的最新日期。但是,这是:

代码语言:javascript
复制
 SELECT * 
FROM TABLE
AND DATE IN (SELECT MAX(DATE)
             FROM TABLE 
             GROUP BY MODULE_CODE, COURSEWORK_NUMBER, STUDENT)

不会为我提供相同的表格,但为每个尝试课程作业的人。我哪里错了?如果细节有点稀疏,很抱歉,但我担心抄袭。

使用SQL plus

EN

回答 2

Stack Overflow用户

发布于 2020-01-11 04:43:38

您正在寻找groupwise最大值。请参阅这篇来自MySQL的文章:https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html我不确定Oracle的正确语法,但它应该类似。至少查询结构应该让你走在正确的道路上。

票数 1
EN

Stack Overflow用户

发布于 2020-01-11 04:43:42

您可以使用row_number函数来解决此问题:

代码语言:javascript
复制
select x.*
(SELECT a.*,row_number() over(partition by name order by date desc) as row1
FROM TABLE a)x
where x.row1=1

这个想法是根据日期分配一个行号,然后选择行号为1的情况。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59688544

复制
相关文章

相似问题

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