Не используйте GROUP BY
для этого.Ваш запрос искажен и не будет работать в самых последних версиях MySQL (с настройками по умолчанию) или почти в любой базе данных.
select r.*
from r
where r.hora_fin_utc = (select max(r2.hora_fin_utc)
from reservas_tanatosalas r2
where r2.cod_tanatosala = r.cod_tanatosala
);
Думайте о проблеме как о проблеме filtering , а не агрегация проблема.Вы хотите отфильтровать данные, чтобы в наборе результатов отображалась только самая последняя строка.
Если производительность является проблемой, то вам нужен индекс для (cod_tanatosala, hora_fin_utc)
.
ЭтоВаш запрос:
Это запрос:
SELECT r.cod_reserva, MAX(r.cod_tanatosala) FROM reservas_tanatosalas r
GROUP BY r.cod_tanatosala
HAVING MAX(r.hora_fin_utc)
Это говорит:
- создать одну строку для каждого значения
cod_tanatosala
- возвращает максимальное значение
cod_tanatosala
- ОШИБКА ЗДЕСЬ: Не знаю, что делать с
cod_reserva
.Это не аргумент функции агрегирования или GROUP BY
.
. HAVING
просто утверждает, что MAX(r.hora_fin_utc)
не является ни 0
, ни NULL
.Не очень полезно.