Пре-MySQL 8 использует подзапрос для определения последних записей для каждой компании:
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT company, MAX(year + quarter / 4.0) AS max_year
FROM yourTable
GROUP BY company
) t2
ON t1.company = t2.company AND
(t1.year + t1.quarter / 4.0) = t2.max_year;

Демо
Ваша текущая попытка связана с проблемой, поскольку она найдет максимальное значение для quarter
без учета конкретного года.То есть, для обеих компаний будет максимальный квартал 4
, хотя в их последние соответствующие годы (2009
) максимальные кварталы были на самом деле 2. Я обхожу это путем формирования десятичного года, который может бытьНапример, 2009.5
для второго квартала 2009
.
Начиная с MySQL 8+, мы можем воспользоваться аналитической функцией ROW_NUMBER
:
SELECT id, company, year, quarter
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY company
ORDER BY year DESC, quarter DESC) rn
FROM yourTable
) t
WHERE t.rn = 1;
Демо