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

おそらく、クエリを少し変更できます。IN の代わりに EXISTS を使用できます。

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 に面倒な作業を行わせました (つまり、2 番目の値をソートし、最大のものを見つけます)。それほどきれいではありませんが、機能します。

于 2013-08-19T13:51:23.210 に答える