Przede wszystkim potrzebujesz metody JPA na obliczenie różnicy między startDate
i pageDate
w odpowiedniej jednostce, co jest nieco trudne do sformułowania, ponieważ jest bardzo zależne od bazy danych. Na koniec będziesz potrzebować niestandardowych funkcji lub napisać bardzo skomplikowane zapytanie JPQL.
Obliczanie dni między dwiema datami w PostgreSQL jest tak proste, jak wykonanie date_part('day', t2 - t1)
. Dla godzin, które już potrzebujesz date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
i minuty date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
Aby korzystać z tych funkcji bazy danych w JPQL, możesz użyć FUNCTION
składnia taka jak FUNCTION('date_part', 'day', :startDate - pageDate)
.
Na koniec będziesz grupować według takiego wyrażenia i liczyć według identyfikatora, coś takiego jak poniżej
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)