Mysql内连接与连接数据的条件

时间:2011-08-10 10:36:54

标签: mysql join

我有以下表格:

表学生:

id  name
1   foo
2   bar
3   baz

表格标记

student_id  mark  date
1           9     2011-08-10
1           20    2011-08-09
1           5     2011-08-08
2           12    2011-08-09
2           8     2011-08-10
3           10    2011-08-10

我希望每个学生都有他们的最后一个标记,即

foo 9
bar 8
baz 10

我怎么能用mysql做到这一点?

编辑:这个例子的重点是如何在连接表上添加排序控件。

1 个答案:

答案 0 :(得分:4)

您可以使用GROUP BYMAX聚合函数创建一个包含所有学生及其最新日期的记录集。然后可以将此记录集连接回原始表以检索所需的其他列。

The GROUP BY Statement

  

GROUP BY语句与聚合一起使用   函数用于将结果集分组为一列或多列。

MAX([DISTINCT] expr)

  

返回expr的最大值。 MAX()可以采用字符串参数;   在这种情况下,它返回最大字符串值。

SQL语句

SELECT  s.name
        , m.Mark
FROM    student s
        INNER JOIN mark m ON m.student_id = s.id
        INNER JOIN (
          SELECT  s.id,
                  MAX(m.Date) as MaxDate
          FROM    student s
                  INNER JOIN mark m ON m.student_id = s.id
          GROUP BY
                  s.id
        ) sm ON sm.id = m.student_id AND sm.MaxDate = m.date