@Dmi3ii

Как выбрать последние записи по определенному полю?

Добрый день.

Нужно выбрать из базы mySQL таблицы `keys` только последние данные по полю `serial`:
## таблица keys
serial | event_date_time | rest_data..
------ | --------------- | -----------
 sn005 | 2015-05-05      | data1
 sn001 | 2015-01-01      | data1
 sn001 | 2016-06-06      | data2
 sn001 | 2020-10-10      | data3
 sn005 | 2019-09-09      | data2

serial | event_date_time | rest_data..
------ | --------------- | -----------
 sn001 | 2020-10-10      | data3
 sn005 | 2019-09-09      | data2


Пока максимум к чему приблизился это:
SELECT t.* FROM 
(SELECT * FROM `keys` ORDER BY event_date_time DESC) t 
GROUP BY t.serial

но и тут дата не последняя...

У меня два вопроса:
1. Помогите, пожалуйста, с запросом.
2. Как выполнить его в Laravel/Eloquent way?

Спасибо. Ушел курить доки...
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `k`.*
  FROM (
    SELECT `serial`, MAX(`event_date_time`) AS `event_date_time`
      FROM `keys`
      GROUP BY `serial`
  ) AS `d`
  JOIN `keys` AS `k`
    ON `k`.`serial` = `d`.`serial` AND `k`.`event_date_time` = `d`.`event_date_time`
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@holfza
Если есть id Primary Key, то можно по нему выбирать, без участия event_date_time
SELECT *
FROM keys
WHERE id IN (SELECT MAX(id) AS id
             FROM keys
             GROUP BY serial)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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