sql无法获取最近日期的记录

ws51t4hk  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(312)

我有一个这样的问题:

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

任何帮助都将不胜感激。

xriantvc

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 会把他们分开。
按学生和考试分组,这就是你所需要的。

group by b.student_id, b.exam_id

相关问题