Я хочу агрегировать данные в зависимости от отметки времени updated_on в jpql, но с неверным ключевым словом INTERVAL - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу агрегировать данные в зависимости от временной отметки updated_on, которая в JPQL должна агрегировать за 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.Как мне это решить?

1 Ответ

0 голосов
/ 01 октября 2018

Вы не можете просто указать интервал в качестве переменной, например, в этом случае интервал '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;

Это вернет дату в текстовой форме, но она может быть прочитана как метка времени в jpa или должна быть преобразована в метку времени в любом случае.Я использовал другую таблицу и имена столбцов, пожалуйста, внесите необходимые изменения.

Или просто используйте собственный запрос в вашем вызове JPA.

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

Все реализации JPA поддерживают это.

...