一个SQL问题:求得一个班级中所有学生某个科目最近一次考试的成绩的最低分从学生(Student),成绩(Result),科目(Subject)3个表中取.学生表字段为:学号(StudentNo),姓名(StudentName);成
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 19:44:11
一个SQL问题:求得一个班级中所有学生某个科目最近一次考试的成绩的最低分从学生(Student),成绩(Result),科目(Subject)3个表中取.学生表字段为:学号(StudentNo),姓名(StudentName);成
一个SQL问题:求得一个班级中所有学生某个科目最近一次考试的成绩的最低分
从学生(Student),成绩(Result),科目(Subject)3个表中取.
学生表字段为:学号(StudentNo),姓名(StudentName);
成绩表字段为:学号(StudentNo),科目编号(SubjectId),成绩(StudentResult),考试时间(ExamDatetime)
科目表字段为:科目编号(SubjectId),科目名称(SubjectName)
------------------------------------------------------------------------------------
注:
某个科目一个学生可以考多次,但是考试时间不同
并不是所有学生都参加了全部的考试,即学生表中的学号在成绩表中不一定有
参加了考试的学生不一定有成绩,即成绩字段可能为null
一个SQL问题:求得一个班级中所有学生某个科目最近一次考试的成绩的最低分从学生(Student),成绩(Result),科目(Subject)3个表中取.学生表字段为:学号(StudentNo),姓名(StudentName);成
没建表 你自己试试 先求出那个科目的ID,我去没有ID,那就假定
一个学生不可能在同一时间 考相同的科目
希望你是认真的研究此问题 而不是直接拷贝我的结果糊弄老师
--先设定那个科目
declare @SubjectName varchar(50)
set @SubjectName = 'XXXX'
select a.StudentNo,b.StudentResult
from StudentNo a left join --显示结果,没有参加考试的显示NULL
(select a.StudentNo,a.StudentResult from Result a inner join --关联最后一次考试的成绩
(select a.StudentNo,a.SubjectId,MAX(a.ExamDatetime) as MaxExamDatetime
from Result a --取出某个科目最后的考试时间
inner join Subject b on a.SubjectId = b.SubjectId
where SubjectName = @SubjectName
group by a.StudentNo,a.SubjectId) b
on a.StudentNo = b.StudentNo and a.SubjectId = b.SubjectId and a.ExamDatetime = b.MaxExamDatetime
) b
on a.StudentNo = b.StudentNo