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)