En primer lugar, necesita una forma JPA de calcular la diferencia entre startDate y pageDate en la unidad respectiva, que es algo difícil de formular porque depende mucho de la base de datos. Al final, necesitará algunas funciones personalizadas o escribir una consulta JPQL muy complicada.
Calcular los días entre dos fechas en PostgreSQL es tan fácil como hacer date_part('day', t2 - t1) . Para las horas que ya necesita date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1) y minutos date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1) .
Para usar estas funciones de base de datos en JPQL, puede usar la FUNCTION sintaxis como FUNCTION('date_part', 'day', :startDate - pageDate) .
Al final, agruparás por tal expresión y harás un conteo por id, algo como lo siguiente
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)