Mysql внутреннее соединение с условием на соединяемые данные - PullRequest
1 голос
/ 10 августа 2011

У меня есть следующие таблицы:

Стол ученический:

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 Ответ

4 голосов
/ 10 августа 2011

Вы можете использовать агрегатную функцию GROUP BY и MAX, чтобы создать набор записей, содержащий всех учащихся с их последней датой. Этот набор записей затем можно присоединить к исходным таблицам для получения других необходимых столбцов.

Заявление GROUP BY

Оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...