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