繁体   English   中英

使用JPA在jpql中按时间戳分组

[英]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)

但是yearmonthday函数不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM