Прежде всего, у вас есть синтаксическая ошибка в вашем запросе : псевдоним подзапроса равен AS result
. Вы путаете это с внутренним псевдонимом b
.
1 строка
Если вы хотите просто одну строку с max(integer_2)
, тогда ORDER BY
/ LIMIT
выполнит эту работу. Ваш запрос может выглядеть так:
SELECT a.integer_0, a.integer_1, a.date_0, a.date_1, a.integer_2
FROM table_a a
JOIN (
SELECT b.integer_0, b.integer_1, b.date_0, max(b.date_1) as max_date
FROM table_a b
GROUP BY b.integer_0, b.integer_1, b.date_0
) AS b ON a.integer_0 = b.integer_0
AND a.integer_1 = b.integer_1
AND a.date_0 = b.date_0
AND a.date_1 = b.max_date
ORDER BY a.integer_2 DESC
LIMIT 1;
Все строки
Если вы хотите все строк вашего набора результатов с max(integer_2)
(как предполагает ваш запрос), то вы можете сделать это:
SELECT a.integer_0, a.integer_1, a.date_0, a.date_1, a.integer_2
FROM table_a a
JOIN (
SELECT b.integer_0, b.integer_1, b.date_0, max(b.date_1) as max_date
FROM table_a b
GROUP BY b.integer_0, b.integer_1, b.date_0
) AS b ON a.integer_0 = b.integer_0
AND a.integer_1 = b.integer_1
AND a.date_0 = b.date_0
AND a.date_1 = b.max_date
WHERE (a.date_1, a.integer_2) = (
SELECT date_1, integer_2
FROM table_a
ORDER BY 1 DESC, 2 DESC
LIMIT 1);
Или, еще лучше, значительно упростить до:
SELECT integer_0, integer_1, date_0, date_1, integer_2
FROM table_a a
WHERE (integer_0, integer_1, date_0, date_1, integer_2) = (
SELECT integer_0, integer_1, date_0, date_1, integer_2
FROM table_a b
ORDER BY 4 DESC, 5 DESC
LIMIT 1);
-- ORDER BY something? -- add these lines ..
-- LIMIT 1; -- .. if you want just one row
Или упростить еще немного
SELECT *
FROM table_a a
WHERE (a) = (
SELECT b
FROM table_a b
ORDER BY date_1 DESC, integer_2 DESC
LIMIT 1);
-- ORDER BY something? -- add these lines ..
-- LIMIT 1; -- .. if you want just one row
Обязательно иметь индекс для table_a (date_1, integer_2) , если производительность имеет значение.