我想根据 jpql 中的 updated_on 时间戳聚合数据,但关键字 INTERVAL 无效

I want to aggregate the data depending on the updated_on timestamp in jpql but invalid keyword INTERVAL

我想根据 updated_on 时间戳聚合数据,该时间戳应该在 JPQL.The 查询中以 2 小时的间隔进行聚合,在 postgres pgadmin 中工作正常。

我用过查询:

@Query("select DATE_TRUNC('day',srisk.updatedOn)+cast(DATE_PART('hour',srisk.updated_on) as Integer)/2*INTERVAL '2 hour' as updatedOn,avg(srisk.riskValue) as riskValue FROM SiteRisk srisk WHERE srisk.updatedOn BETWEEN :fromDate and :toDate and srisk.siteId =:siteId group by 1 order by 1 desc")

但是它说 INTERVAL 附近的关键字无效。 我该如何解决?

您不能只将间隔指定为变量吗,例如在本例中间隔“2 小时”是 120 分钟。可能不是 120 分钟,也可能是 2 小时,请尝试验证您的结果。像这样 -

select pg_catalog.date(a.sale_date) || ' ' || cast(cast(DATE_PART('hour',a.sale_date) as Integer)/2*2 as text) || ':00:00' as date1, avg(sale) as riskValue 
    FROM test1 a group by 1 order by 1 desc;

这将return日期以文本形式显示,但它可以在jpa中读取为时间戳,或者必须将其转换为时间戳,无论哪种方式。我使用了不同的 table 和列名,请进行必要的修改。

或者只在 JPA 调用中使用本机查询。

https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#createNativeQuery-java.lang.String-

所有 JPA 实现都支持这一点。