Задать вопрос
@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 Простой 1 комментарий
Решения вопроса 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)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы