Как составить запрос в Doctrine QB на выбоку максимального значения в группе?

Нужно группировать по od.name. Чтобы в результатах остались записи с максимальным значением поля od.price по группе.

$queryBuilder = $this->getEntityManager()->createQueryBuilder();

$queryBuilder->select('od')
    ->from(OrderDetail::class, 'od')
    ->where('od.name LIKE :chars')
    ->groupBy('od.name')
    ->orderBy('od.name','DESC')
    ->setParameter('chars', '%' . $chars . '%')
    ->setMaxResults(20);

return $queryBuilder->getQuery()->getResult();

пример таблицы:

|  id  |  name   |  price  |
|   1  |  prim1  |    100  |
|   2  |  prim1  |    250  |
|   3  |  prim1  |    300  |
|   4  |  prim2  |     90  |
|   5  |  prim2  |     80  |

ожидаемый результат:

|  id  |  name   |  price  |
|   3  |  prim1  |    300  |
|   4  |  prim2  |     90  |

Ответы (1 шт):

Автор решения: Drakulitka

Вот так работает:

$queryBuilder->select( 'a' )
    ->from( OrderDetail::class, 'a')
    ->orderBy( 'a.name','DESC' )
    ->where('a.name LIKE :title')
    ->innerJoin( OrderDetail::class, 'b', 'WITH', 'a.price > b.price' )
    ->groupBy('a.name')
    ->setParameter('title', '%' . $chars . '%')
    ->setMaxResults(20);
→ Ссылка