
[英]JPA JPQL: SELECT NEW with COUNT, GROUP BY and ORDER BY
[英]Group by timestamp in jpql with JPA
伙计们! 我正在尝试使用JPA(EclipseLink + Derby)在JPQL中按时间戳将查询结果分组,并将其用于创建Result对象。 我的查询是:
Select new com.restaurant.entities.Report(o.timeOfOrder, count(o.id), sum(o.price))";
queryText+=" from Orders o ";
queryText+="where o.timeOfOrder BETWEEN :start AND :end";
queryText+=" group by o.timeOfOrder"
不幸的是,唯一的一个毫秒会产生很大的变化,因此按o.timeOfOrder进行简单分组是行不通的。
我已经尝试过这种方法 ,但是我已经
Internal Exception: java.sql.SQLSyntaxErrorException: Column reference 'ORDERS.TIMEOFORDER' is invalid, or is part of an invalid expression. For a SELECT list with a GROUP BY, the columns and expressions being selected may only contain valid grouping expressions and valid aggregate expressions.
也许,除了更改数据库中的字段类型之外,还有别的出路吗?
您的查询必须看起来像这样:
Select new com.restaurant.entities.Report(o.timeOfOrder, count(o.id), sum(o.price))
from Orders o
where o.timeOfOrder BETWEEN :start AND :end
group by year(o.timeOfOrder), month(o.timeOfOrder), day(o.timeOfOrder)
但是year
, month
和day
函数不是jpql标准,因此您必须使用FUNCTION才能使用等效的DB函数来执行所需的操作。 这里是更多: https : //stackoverflow.com/a/3676865/534877
通过使用FUNCTION('period',fieldToTrim)可以解决此问题。 但是,使用GROUPING BY结果时,请记住,“句点”(不是fieldToTrim)必须(!)在SELECT部分中,而不仅在GROUP BY中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.