特定の列の最大値を持つレコードを選択しようとしています。これまでのところ、次のようになっています。
select o from Order o
where o.orderNumber = :orderNumber
and o.version =
(select max(o.version) from Order o where o.orderNumber = :orderNumber)
これはSQLを生成しているようです:
SELECT *
FROM Order
WHERE ordernumber = :orderNumber
AND orderversion = (SELECT Max(orderversion)
FROM order
WHERE ordernumber = :orderNumber);
次のSQLの方が効率的だと思います。
SELECT *
FROM order ord
INNER JOIN (SELECT ordernumber,
Max (version) AS version
FROM order
WHERE ordernumber = :ordernumber
GROUP BY ordernumber) mx
ON ord.ordernumber = mx.ordernumber
AND ord.version = mx.version;
とにかくこれをJPQLで表現できますか?
(特定のフィールドで最大値を持つレコードの選択に関連する質問に対するオンラインでのほとんどの回答は、私が提示した上記のJPQLを示唆しているようです...)