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)