我有一个这样的问题:
Select a.student_class,
b.student_id,
b.student_name,
b.student_exam,
b.exam_name,
b.exam_completion_date
from exam_table b inner join student_table a on a.student_id=b.student_id
where exam_name='cs'
如果学生参加了多次考试,我会在我的考试表中有多个记录。我想要最新的考试完成日期
我尝试了以下修改后的查询(似乎不起作用):
Select a.student_class,
b.student_id,
b.student_name,
b.student_exam,
b.exam_name,
Max(b.exam_completion_date)
from exam_table b inner join student_table a on a.student_id=b.student_id
where exam_name='cs'
group by a.student_class,
b.student_id,
b.student_name,
b.student_exam,
b.exam_name,
b.exam_completion_date
任何帮助都将不胜感激。
1条答案
按热度按时间xriantvc1#
你的
group by
太宽了。它会被分成不同的组。。。学生\班级
学号
学生姓名
学生高考
考试名称
考试结束日期
每个小组都会有不同的
exam_completion_date
,所以max(exam_completion_date)
只是exam_completion_date
.简单地把所有相同的列从
select
进入group by
,但这不是必须的。添加主键来唯一标识行就足够了。例如,假设student_id
是的主键student_table
,group by student_id
.student_name
不需要,因为它取决于student_id
. (student_name
不应该在exam_table
除非你的学生能为每次考试提供不同的名字)。最好是按id分组,而不是按名称分组,否则你可能会在不知不觉中把两个东西分组在一起。如果有两个名字相同的考试,
group by exam_name
会把他们当作一个单一的考试。group by exam_id
会把他们分开。按学生和考试分组,这就是你所需要的。