Mysql 如何在课程分组时获得最大出生日期?

Mysql 如何在课程分组时获得最大出生日期?,mysql,sql,Mysql,Sql,我遇到了一个问题,我要从学生表中的每门课程中选择最年轻的学生 SELECT name, lastname, MAX(fdate) as 'Youngest', course FROM student GROUP BY course 结果: 此查询返回三个课程中的最高日期,但关联的名称错误。 这只是MySQL课程中的一项简单任务,我们不打算使用连接。尝试以下方法: SELECT s1.name, s1.lastname, s1-fdate FROM student s1 WHERE NOT

我遇到了一个问题,我要从学生表中的每门课程中选择最年轻的学生

SELECT name, lastname, MAX(fdate) as 'Youngest', course  
FROM student
GROUP BY course
结果:

此查询返回三个课程中的最高日期,但关联的名称错误。 这只是
MySQL
课程中的一项简单任务,我们不打算使用
连接。

尝试以下方法:

SELECT s1.name, s1.lastname, s1-fdate
FROM student s1
WHERE NOT EXISTS (
    SELECT 'YOUNGEST'
    FROM student s2
    WHERE s2.course = s1.course
    AND s2.fdate > s1.fdate
)

在这个查询中,我想在同一课程(s2.course=s1.course)的学生中检索最年轻的学生(s2.fdate>s1.fdate)

如果您不打算使用联接,那么可以使用内部选择

select
  A.course_name as "Name", 
  max(A.day_of_birth) as "Birth date", 
  (select 
     student_name 
   from students 
   where course_name = A.course_name and day_of_Birth=max(A.day_of_birth) limit 1
  ) as "who"
from students A
group by A.course_name

IMO这句话在语法上是错误的。至少对于像Oracle这样的其他数据库,您必须列出
分组依据
->
分组依据名称、姓氏、课程
@user2989408 no。最年轻的是最近的日期=最长日期。老年人有古老的日期,这是最早的dates@hgoebl这是一个特殊的Mysql(mis)功能,您可以选择字段,而无需对字段进行分组。Mysql将只从组中的一行中选择一个值。这就是名称错误的原因。这是没有效率的。。如果表很大,执行起来会非常慢,执行计划就是选择max(出生日期)大于executesubselect的课程。可能是我错了,当你用where条件做一个子选择时,它会对外部选择中的每个选择进行选择。。。这意味着您正在进行选择以比较(外部选择表)学生表中每一行的结果。。。就这个问题而言,这可能是一个很好的解决方案,但总的来说,这种方法是一个糟糕的想法。虽然要达到我们现在的水平有点复杂。所有其他任务都很简单,只需从学生中选择*,其中fdate>“1990-1-1”等等。只是挑选一些小而简单的东西。