我有下表:
表学生:
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 做到这一点?
编辑:这个例子的重点是如何在连接表上添加排序条件。
最佳答案
您将使用 GROUP BY
和 MAX
聚合函数来创建包含所有学生及其最新日期的记录集。然后可以将该记录集连接回原始表以检索所需的其他列。
The GROUP BY statement is used in conjunction with the aggregate functions to group the result-set by one or more columns.
Returns the maximum value of expr. MAX() may take a string argument; in such cases, it returns the maximum string value.
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
关于Mysql inner join 以连接数据为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009445/