Как написать SQL-запрос?

Помогите сообразить. В БД есть имена пациенты и даты их визитов ко врачу, как выбрать последний визит каждого пациента?
id / name / date
1 / Дима / 2017
2 / Дима / 2018
3 / Саша / 2017
4 / Саша / 2018

Нужный результат:
2 / Дима / 2018
4 / Саша / 2018
Здесь нужно GROUP BY name и MAX() date но как это в один запрос связать?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `t`.`id`, `m`.`name`, `m`.`date`
  FROM (
    SELECT MAX(`date`) AS `date`, `name`
      FROM `table`
      GROUP BY `name`
  ) AS `m`
  JOIN `table` AS `t`
    ON `t`.`date` = `m`.`date` AND `t`.`name` = `m`.`name`
Ответ написан
m_klyushkov
@m_klyushkov
Инженер
SELECT id,name,MAX(date) FROM table GROUP BY name;

Пример:
MariaDB [test]> select * from t1;
+------+-------+------+
| id   | name  | date |
+------+-------+------+
|    1 | Dima  | 2017 |
|    2 | Dima  | 2018 |
|    3 | Sasha | 2017 |
|    4 | Sasha | 2018 |
+------+-------+------+
4 rows in set (0.00 sec)

MariaDB [test]> SELECT id,name,MAX(date) FROM t1 GROUP BY name;
+------+-------+-----------+
| id   | name  | MAX(date) |
+------+-------+-----------+
|    1 | Dima  | 2018      |
|    3 | Sasha | 2018      |
+------+-------+-----------+
2 rows in set (0.00 sec)
Ответ написан
SELECT id, name, date FROM table GROUP BY name ORDER BY date DESC;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы