Итак, вы хотите выбрать те строки, для каждой A
, которые имеют максимум B
.
Вы почти на месте - вам просто нужно присоединить ваш запрос обратно к исходной таблице:
SELECT Foo.* FROM Foo
INNER JOIN (
SELECT A, MAX(B) AS MAXB
FROM Foo
GROUP BY A
) AS Subtable -- your original query
ON Subtable.MAXB = Foo.B and Foo.A = Subtable.A;
Примечание. Поскольку я не знаю, какую версию MySQL вы используете, я не могу гарантировать, что она будет работать на вашей.
Обновление: вотпара других примеров замены подзапросов объединениями:
пример 1
пример 2
Второе обновление: из-за проблем совместимости MySQL, эта версия перемещает подзапрос и добавляет неявное соединение, помещая условия соединения в предложение where:
SELECT Foo.*
FROM
Foo,
(SELECT A, MAX(B) AS MAXB
FROM Foo
GROUP BY A
) AS Subtable -- your original query
WHERE Subtable.MAXB = Foo.B and Foo.A = Subtable.A;
Источник: согласно руководству MySQLдля 4.0 и 4.1 подзапросы разрешены в FROM
-клазах - так что, надеюсь, это работает в вашей системе.