2017-06-12 6 views
0

JPQLを使用して、このクエリを記述することが方法です:JPQL最大-N-グループごとのクエリ

select * 
from "tbCita" c inner join "tbAccionCita" ac1 
on c."citaId" = ac1."citaId" 
left outer join "tbAccionCita" ac2 on (c."citaId" = ac2."citaId" and 
    (ac1."fechaAccionCita" < ac2."fechaAccionCita" 
    or ac1."fechaAccionCita" = ac1."fechaAccionCita" 
    and ac1."accionCitaId" < ac2."accionCitaId") 
) 
inner join "tbUsuarioCita" uc 
    on c."citaId" = uc."citaId" 
    inner join "tbUser" u 
    on uc."userId" = u."userId" 
where 
    ac2."accionCitaId" is null 
    and u."userId" = 1 

fechaAccionCitaは日付です:)

私は、最新のを取得しようとしています= 1

userIdを持つすべての予定(tbCita)のための状態は、(1回の予定が複数の状態を持っている)クエリが期待どおりに動作しているが、JPQLで、それは私に次のエラー与える:

をここでは

with-clause referenced two different from-clause elements

クエリ:

SELECT c " 
     + "FROM Cita c " 
     + "INNER JOIN c.usuarioCita u " 
     + "INNER JOIN FETCH c.accionCita a " 
     + "LEFT OUTER JOIN c.accionCita a2 on (a.fechaAccionCita < a2.fechaAccionCita or " 
     + "a.fechaAccionCita = a2.fechaAccionCita and a.accionCitaId < a2.accionCitaId) " 
+0

無関係ですが、テーブル内の「最新の」行に結合するより効率的な方法があります。あなたのものは実際には最も効率的ではありません。 (Btw:データベースのテーブルと同様に、すべてのJavaクラスの前に 'Cls'を付けますか?) –

答えて

0

は、次の作業をしていますか?また、OR文のロジックが期待どおりに機能していることを確認してください。追加のカッコが必要かもしれないようです。

select c 
from tbCita c, tbAccionCita ac1, tbUsuarioCita uc, tbUser u 
left join tbAccionCita ac2 on (
    c.citaId = ac2.citaId 
    and (ac1.fechaAccionCita < ac2.fechaAccionCita 
     or ac1.fechaAccionCita = ac1.fechaAccionCita 
     and ac1.accionCitaId < ac2.accionCitaId)) 
where c.citaId = ac1.citaId 
    and c.citaId = uc.citaId 
    and uc.userId = u.userId 
    and ac2.accionCitaId is null 
    and u.userId = 1 
関連する問題