【发布时间】:2012-05-18 11:45:10
【问题描述】:
我正在尝试为特定列选择具有最大值的记录,这是我目前所拥有的:
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...)
【问题讨论】:
-
您使用的是哪个数据库引擎?
-
我使用 Oracle 和 Hibernate 作为我的 JPA 提供程序。