Ваш select
:
select a.name , a.spids , a.group , a.id , r.date, r.event
Ваш group by
:
group by a.id
Это несовместимо - каковы значения всех других столбцов в select
, кроме a.id
. То, что MySQL поддерживает это, является (ошибочной) особенностью базы данных, не поддерживаемой почти любой другой базой данных.
Наиболее типичное решение - это исправить их, чтобы они были совместимы:
select a.name, a.spids, a.group, a.id, max(r.date), max(r.event)
Ваш group by
:
group by a.name , a.spids , a.group , a.id
В вашем случае group by
, вероятно, вообще не нужен:
SELECT a.name, a.spids, a.group, a.id, r.date, r.event
FROM a LEFT OUTER JOIN
(SELECT id, MAX(date) AS latest
FROM r
GROUP BY id
) rev
ON rev.id = a.id LEFT JOIN
r
ON r.id = rev.id AND r.date = rev.latest
ORDER BY ID;
Вам это нужно, только если есть несколько строк с одинаковой максимальной датой.
Наиболее распространенное решение в Oracle решает эту проблему:
SELECT a.name, a.spids, a.group, a.id, r.date, r.event
FROM a LEFT JOIN
(SELECT r.*,
ROW_NUMBER() OVER (PARTITION BY r.id ORDER BY r.date DESC) as seqnum
FROM r
) rev
ON rev.id = a.id AND seqnum = 1
ORDER BY ID;