Это особый случай запроса "top N на категорию" . Вы хотите показать максимальную дату для идентификатора материала. В SQL (также будет работать в JPQL):
SELECT SUM(Amount), SUM(Price), MaterialId, MAX(Date)
FROM t
GROUP BY MaterialId
Обратите внимание, что с помощью этого метода вы также не можете отобразить идентификатор или MAX (идентификатор), поскольку идентификаторы и даты не обязательно монотонно увеличиваются. Если вы по-прежнему хотите, чтобы идентификатор отображался, как в вашем примере, напишите этот SQL-запрос (я не думаю, что это можно сделать в JPQL):
SELECT MAX(ID), SUM(Amount), SUM(Price), MaterialId, MAX(Date)
FROM (
SELECT last_value(ID) OVER (
PARTITION BY MaterialId
ORDER BY Date, ID
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS ID,
Amount,
Price,
MaterialId,
SELECT last_value(Date) OVER (
PARTITION BY MaterialId
ORDER BY Date, ID
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS Date
FROM t
) t
GROUP BY MaterialId