Em primeiro lugar, você precisa de uma maneira JPA de calcular a diferença entre o
startDate
e pageDate
na respectiva unidade, o que é um pouco difícil de formular porque é muito dependente do banco de dados. No final, você precisará de algumas funções personalizadas ou escrever uma consulta JPQL muito complicada. Calcular os dias entre duas datas no PostgreSQL é tão fácil quanto fazer
date_part('day', t2 - t1)
. Para as horas você já precisa de date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
e minutos date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
. Para usar essas funções de banco de dados em JPQL, você pode usar a função
FUNCTION
sintaxe como FUNCTION('date_part', 'day', :startDate - pageDate)
. No final, você estará agrupando por tal expressão e fará uma contagem por id, algo como o seguinte
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)