SQL语句查询student所有学生的最近一次考试成绩表是result student中有些学生没有考过没有在result表中也要显示出来

SQL语句查询student所有学生的最近一次考试成绩表是result student中有些学生没有考过没有在result表中也要显示出来

分析下
1、肯定以学生为准,因为有学生没考试过
2、既然是最近一次,那就是1个学生,会有考试多次的情况

因为需求是最后【一次】,所以有2个方法可以考虑
1、用row_number 的函数
先通过left join 拿到考试明细
select XXX from 学生 left join 考试成绩 on 学生.学生编号=考试成绩.学生编号

使用row_number over 对每次成绩做编号。
select XXX, row_number() over(partition by 学生编号 order by 考试时间 desc) num from 考试明细
每个学生考试都给了编号, 注意按考试时间反向排序

然后嵌套查询
select XXX from (前面的子查询)tmp where num=1
就拿到了每个【参加了考试】的学生,最后考试的成绩。

这个方法,可以得到每个学生,最后几次的成绩,或者最好的几次成绩,取决于你排序的字段,以及 num过滤的条件

方法2
拿到每个学生最后考试的时间
select 学生编号,max(考试时间) from 考试成绩 group by 学生编号

关联拿到考试成绩
select XXX from 考试成绩 where (学生编号,考试时间) in (前面的查询)

和学生的join, 与方法1相同

建议方法1,这个是典型的OLAP函数使用。

要用全连接吧