簡體   English   中英

使用 POSTGRES 和 eclipselink 的 JPA 日期截斷組

[英]JPA date truncation group by using POSTGRES and eclipselink

我試圖截斷日期,並按值分組。 我試過這個:

日本特許經營協會

select v.sop, FUNC('DATE_TRUNC', 'day', v.scrappedAt) as dt, sum(v.totalValue) 
from TABLE v 
where v.coordStatus like 'done%' and (:plant is null or v.target = 
:plant) and v.scrappedAt is not null 
group by v.sop, dt

我也試過按FUNC分組

select v.sop, FUNC('DATE_TRUNC', 'day', v.scrappedAt) as dt, sum(v.totalValue) 
from TABLE v 
where v.coordStatus like 'done%' and (:plant is null or v.target = 
:plant) and v.scrappedAt is not null 
group by v.sop, FUNC('DATE_TRUNC', 'day', v.scrappedAt)

錯誤是一樣的

org.postgresql.util.PSQLException:錯誤:列“t_mcp_verschrottungs_db_sharepoint.scrappedat”必須出現在 GROUP BY 子句中或用於聚合函數

嚴格來說,如果FUNC是原生 Postgres 函數,那么您的查詢應該可以正常工作,並且該查詢將符合 ANSI。 在閱讀了這個 SO question 之后,似乎 Postgres 無法弄清楚這兩個FUNC調用實際上是同一件事。 也許您可以使用相關子查詢重新表述總和:

SELECT
    v1.sop,
    FUNC('DATE_TRUNC', 'day', v1.scrappedAt) AS dt,
    (SELECT SUM(totalValue) FROM TABLE v2
     WHERE v2.sop = v1.sop AND
         FUNC('DATE_TRUNC', 'day', v2.scrappedAt) =
         FUNC('DATE_TRUNC', 'day', v1.scrappedAt) AND
         v2.acoordStatus LIKE 'done%' AND
         (:plant is null OR v2.target = :plant) AND
         v2.scrappedAt IS NOT NULL) value_sum
FROM TABLE v1
WHERE
    v1.coordStatus LIKE 'done%' AND
    (:plant is null OR v1.target = :plant) AND
    v1.scrappedAt IS NOT NULL;

如果它不起作用或性能不佳,則上述方法的替代方法是使用本機 Postgres 查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM