将此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运行良好,可以返回用户每天最后一次购买。我尝试在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表达式没有有效的表达式。” “必须为范围变量声明提供标识变量。”
可能不是一件非常困难的事情,但我已经花了一点时间来度过难关。有人可以帮助我吗?
答案 0 :(得分:0)
虽然答案可能已经很晚了,但我仍然发布了它,因为它可能在将来帮助某人。
在嵌套选择中,您必须为您正在使用的实体添加标识符: FROM Purchases p 并更新(FUNC('day',u) .datePurchase))到(FUNC('day', p .datePurchase))
最佳!