Prima di tutto, hai bisogno di un modo JPA per calcolare la differenza tra startDate e pageDate nella rispettiva unità, che è alquanto difficile da formulare perché dipende molto dal database. Alla fine avrai bisogno di alcune funzioni personalizzate o di scrivere una query JPQL molto complicata.
Calcolare i giorni tra due date in PostgreSQL è facile come fare date_part('day', t2 - t1) . Per le ore che ti servono già date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1) e minuti date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1) .
Per utilizzare queste funzioni di database in JPQL, puoi usare FUNCTION sintassi come FUNCTION('date_part', 'day', :startDate - pageDate) .
Alla fine, raggrupperai per tale espressione e farai un conteggio per id, qualcosa come il seguente
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)