我有以下表格:
表学生:
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做到这一点?
编辑:这个例子的重点是如何在连接表上添加排序控件。
答案 0 :(得分:4)
您可以使用GROUP BY
和MAX
聚合函数创建一个包含所有学生及其最新日期的记录集。然后可以将此记录集连接回原始表以检索所需的其他列。
GROUP BY语句与聚合一起使用 函数用于将结果集分组为一列或多列。
返回expr的最大值。 MAX()可以采用字符串参数; 在这种情况下,它返回最大字符串值。
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