Nejprve potřebujete způsob JPA pro výpočet rozdílu mezi startDate
a pageDate
v příslušné jednotce, což je poněkud obtížné formulovat, protože je velmi závislé na databázi. Nakonec budete potřebovat nějaké vlastní funkce nebo napsat velmi komplikovaný dotaz JPQL.
Počítání dnů mezi dvěma daty v PostgreSQL je stejně snadné jako date_part('day', t2 - t1)
. Pro hodiny, které již potřebujete date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
a minuty date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
Chcete-li použít tyto databázové funkce v JPQL, můžete použít FUNCTION
syntaxe jako FUNCTION('date_part', 'day', :startDate - pageDate)
.
Nakonec budete seskupovat podle takového výrazu a počítat podle id, něco jako následující
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)