1

この SQL クエリを JPQL に変換するのに少し問題があります。

select max(datePurchase) from purchases where userId = id and date_trunc('day',datePurchase)
in (select distinct (date_trunc('day',datePurchase)) as day from purchases where userId = id and datePurchase < initialDate and datePurchase > finalDate) group by date_trunc('day',datePurchase)

このSQLはうまく機能しており、ユーザーからの1日あたりの最後の購入を返します。JPQLで同じことをしようとしました:

Query query = em.createQuery("SELECT u MAX(u.datePurchase) FROM Purchases u WHERE u.userId.id = :id AND FUNC('day',u.datePurchase)" +
                "IN (SELECT DISTINCT (FUNC('day',u.datePurchase)) AS day FROM Purchases WHERE u.userId.id = :id AND u.datePurchase < :finalDate AND u.datePurchase > :inicialDate) GROUP BY FUNC('day',u.datePurchase)");

query.setParameter("id", idUsuario);
query.setParameter("dataInicial", dataInicial);
query.setParameter("dataFinal", dataFinal);
List<MovSaldo> saldos = (List<MovSaldo>) query.getResultList();

em.getTransaction().commit();

エラーは次のとおりです。「IN 式に有効な式がありません。」「範囲変数宣言には識別変数を指定する必要があります。」

おそらくそれほど難しいことではありませんが、私はすでに少しイライラする時間を費やしてきました. 誰か助けてくれませんか?

4

1 に答える 1

0

答えはおそらく遅れていますが、将来誰かを助けるかもしれないので、私はまだ投稿しました。

ネストされた選択では、作業しているエンティティの識別子を配置する必要があります: FROM Purchases pおよび (FUNC('day',u.datePurchase)) のようなものを(FUNC('day', p .datePurchase))に更新します

一番!

于 2014-01-17T18:05:08.870 に答える