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 运行良好,它返回用户每天最后一次购买。我尝试在 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 回答