Först och främst behöver du ett JPA-sätt att beräkna skillnaden mellan startDate
och pageDate
i respektive enhet, vilket är lite svårt att formulera eftersom det är väldigt databasberoende. I slutändan kommer du att behöva några anpassade funktioner eller skriva en mycket komplicerad JPQL-fråga.
Att beräkna dagarna mellan två datum i PostgreSQL är lika enkelt som att göra date_part('day', t2 - t1)
. För timmarna behöver du redan date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
och minuter date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
För att använda dessa databasfunktioner i JPQL kan du använda FUNCTION
syntax som FUNCTION('date_part', 'day', :startDate - pageDate)
.
I slutändan kommer du att gruppera efter ett sådant uttryck och räkna efter id, ungefär som följande
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)