2

我有一个试图转换为 JPQL 的 SQL 查询。查询如下:

SELECT *
FROM MyTable
WHERE (myFirstColumn, mySecondColumn) IN (
    SELECT myFirstColumn, max(mySecondColumn)
    FROM MyTable
    GROUP BY myFirstColumn
)

我的转换尝试很简单:

select myObject
from MyObject as myObject
where (myObject.myFirstValue, myObject.mySecondValue) in (
    select subMyObject.myFirstValue, max(subMyOject.mySecondValue)
    from MyObject as subMyObject
    group by subMyObject.myFirstValue
)

MyObject 映射到 MyTable(使用注释)。

如果我了解 IN 语句中的 JPQL 文档(http://openjpa.apache.org/builds/1.2.3/apache-openjpa/docs/jpa_langref.html#jpa_langref_in),我真的不确定我是否知道,这种直接转换是不可能的。还有其他方法吗?

4

2 回答 2

1

也许您可以稍微更改一下查询。您可以使用 EXISTS 代替 IN。

select myObject
from MyObject myObject
where exists
( 
   select subMyObject.myFirstValue, max(subMyOject.mySecondValue) 
   from MyObject subMyObject 
   where myObject.myFirstValue = subMyObject.myFirstValue 
   group by subMyObject.myFirstValue 
   having max(subMyOject.mySecondValue) = myObject.mySecondValue

) 
于 2013-06-20T13:25:15.923 回答
0

最后,我找不到方法,让 Java 完成繁重的工作(即,对第二个值进行排序并找到最大的值)。它不那么漂亮,但它有效。

于 2013-08-19T13:51:23.210 回答