簡體   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