Группировать по элементам, показывая только последнюю запись каждой группы - PullRequest
1 голос
/ 17 марта 2020

У меня есть две таблицы, одна обрабатывает устройство (камеру) и его спецификации, другая обрабатывает каждого отсканированного посетителя.

Я хочу просто выбрать последний раз, когда каждая камера сканировала кто-то.

SELECT site, visit_date, visit_time, remark, devices.status FROM visits 
INNER JOIN devices ON site = name 
ORDER BY visit_date DESC, visit_time DESC

Я могу использовать INNER JOIN, чтобы получить желаемые результаты, но он выберет все результаты, очевидно. Я пробовал GROUP BY, но это не дает мне желаемого результата.

Результат INNER JOIN Я сейчас использую:

enter image description here

Если мы используем вышеупомянутое изображение в качестве базы, то я хотел бы, например:

'Subrosa 2', '2020-03-17', '16:18:08', 'Login: Sucess', '1'
'Meerkat1',  '2020-03-17', '16:18:07', 'Login: Sucess', '1'
'Welkom',    '2020-03-17', '16:18:04', 'Login: Sucess', '1'
'Markgraaf', '2020-03-17', '16:17:02', 'Login: Sucess', '1'

В этом, опять же, он показывает только последнее время сканирования и дата для каждого устройства.

1 Ответ

1 голос
/ 17 марта 2020

Вы можете попробовать следующее:

SELECT visits.site, visits.visit_date, visits.visit_time, visits.remark, devices.status
FROM visits INNER JOIN (
  SELECT site, MAX(CONCAT(visit_date, ' ', visit_time)) AS max_datetime
  FROM visits
  GROUP BY site
) max_visits ON visits.site = max_visits.site 
  AND CONCAT(visits.visit_date, ' ', visits.visit_time) = max_visits.max_datetime
INNER JOIN devices ON devices.name = visits.site
ORDER BY visits.visit_date DESC, visits.visit_time DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...