我的表是:
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
3 | 10 | 03/03/2009 | john | 300
4 | 11 | 03/03/2009 | juliet | 200
6 | 12 | 03/03/2009 | borat | 500
7 | 13 | 24/12/2008 | borat | 600
8 | 13 | 01/01/2009 | borat | 700
Run Code Online (Sandbox Code Playgroud)
我需要选择每个不同的 …
我正在尝试选择具有特定列的最大值的记录,这是我到目前为止所拥有的:
select o from Order o
where o.orderNumber = :orderNumber
and o.version =
(select max(o.version) from Order o where o.orderNumber = :orderNumber)
Run Code Online (Sandbox Code Playgroud)
这似乎是生成SQL:
SELECT *
FROM Order
WHERE ordernumber = :orderNumber
AND orderversion = (SELECT Max(orderversion)
FROM order
WHERE ordernumber = :orderNumber);
Run Code Online (Sandbox Code Playgroud)
我认为以下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;
Run Code Online (Sandbox Code Playgroud)
无论如何我可以在JPQL中表达这个吗?
(对于在特定字段上选择具有最大值的记录相关的问题,大多数在线答案似乎表明我提出的上述JPQL ...)