我有一个课程作业分数表,上面有表的标题:
模块代码、课程号、学生、提交日期、分数
表标题顺序的示例数据:
数学,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
有时,一个学生重新参加考试,他们有额外的一排课程作业。我只需要试着把最新的课程作业放在表格里。当我隔离一个特定的学生时,下面的方法是有效的:
SELECT *
FROM TABLE
WHERE NAME = ‘NAME’
AND DATE IN (SELECT MAX(DATE)
FROM TABLE
WHERE NAME = ‘NAME’
GROUP BY MODULE_CODE, COURSEWORK_NUMBER, STUDENT)这为该人员提供了正确的解决方案,为我提供了表中每一行(每个课程作业)的最新日期。但是,这是:
SELECT *
FROM TABLE
AND DATE IN (SELECT MAX(DATE)
FROM TABLE
GROUP BY MODULE_CODE, COURSEWORK_NUMBER, STUDENT)不会为我提供相同的表格,但为每个尝试课程作业的人。我哪里错了?如果细节有点稀疏,很抱歉,但我担心抄袭。
使用SQL plus
发布于 2020-01-11 04:43:38
您正在寻找groupwise最大值。请参阅这篇来自MySQL的文章:https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html我不确定Oracle的正确语法,但它应该类似。至少查询结构应该让你走在正确的道路上。
发布于 2020-01-11 04:43:42
您可以使用row_number函数来解决此问题:
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的情况。希望这能有所帮助。
https://stackoverflow.com/questions/59688544
复制相似问题