Mysql inner join 以连接数据为条件

标签 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 做到这一点?

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

最佳答案

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

The GROUP BY Statement

The GROUP BY statement is used in conjunction with the aggregate functions to group the result-set by one or more columns.

MAX([DISTINCT] expr)

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/

相关文章:

mySQL JOIN 来自不同表不同记录

MySQL Join 与可选的选择值

mysql - 加入 2 个 mysql 表并按 1 个表中相同行的数量排序

sql - 连接两个表,其中某些列合并而其他列必须为空

mysql - 如何为订单及其项目编写自定义 MySQL 选择查询

php - 不在 PHP 中将结果提取到数组中

mysql在不同版本的InnoDB之间复制文件

php - 我怎样才能修复phpmyadmin中的这个sp?

mysql - 将 MySQL 表合并为一张表

mySQL MATCH 跨多个表