需要从完成中获得第一个成功完成日期

Need to get first successful completion date from completions

我的数据是这样的:

StuId StuName Exam Attempt Score
1       Sam   Eng  1       45
1       Sam   Eng  2       58
1       Sam   Eng  3       63
2       Mat   Eng  1       65
2       Mat   Eng  2       75

如果学生超过 60 分,他就通过了。我想为每个学生获取第一次成功的尝试,并忽略所有其他尝试 我的预期结果集如下所示:

StuId   StuName Exam Attempt Score
       
     1       Sam   Eng  3       63
     2       Mat   Eng  1       65

有什么方法可以在 SQL 服务器中实现这一点?

您可以使用 where 子句过滤掉不成功的尝试,然后使用 row_number 为每个学生的每次尝试分配一个标识符,并选择第一个:

SELECT StuId, StuName, Exam, Attempt, Score
FROM   (SELECT StuId, StuName, Exam, Attempt, Score,
               ROW_NUMBER() OVER (PARTITION BY StuId, Exam ORDER BY Attempt) AS rn
        FROM   exams
        WHERE  Score >= 60) t
WHERE  rn = 1

您也可以为此使用聚合:

select stuid, stuname, 
       max(exam) keep (dense_rank first order by attempt) as exam,
       min(attempt),
       max(score) keep (dense_rank first order by attempt) as score
from exams
where score >= 60;

keep 语法是 Oracle 的(花哨?冗长?)实现“第一个”聚合函数的方式。