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