Първо, имате нужда от JPA начин за изчисляване на разликата между startDate
и pageDate
в съответната единица, което е малко трудно за формулиране, тъй като е много зависимо от базата данни. В крайна сметка ще ви трябват някои персонализирани функции или ще напишете много сложна JPQL заявка.
Изчисляването на дните между две дати в PostgreSQL е толкова лесно, колкото да направите date_part('day', t2 - t1)
. За часовете вече имате нужда от date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
и минути date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
За да използвате тези функции на базата данни в JPQL, можете да използвате FUNCTION
синтаксис като FUNCTION('date_part', 'day', :startDate - pageDate)
.
В крайна сметка ще групирате по такъв израз и ще извършите броене по id, нещо като следното
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)