Pertama-tama, Anda memerlukan cara JPA untuk menghitung perbedaan antara startDate
dan pageDate
di unit masing-masing, yang agak sulit dirumuskan karena sangat bergantung pada basis data. Pada akhirnya Anda akan memerlukan beberapa fungsi khusus atau menulis kueri JPQL yang sangat rumit.
Menghitung hari antara dua tanggal di PostgreSQL semudah melakukan date_part('day', t2 - t1)
. Untuk jam yang Anda butuhkan date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
dan menit date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
Untuk menggunakan fungsi database ini di JPQL, Anda dapat menggunakan FUNCTION
sintaks seperti FUNCTION('date_part', 'day', :startDate - pageDate)
.
Pada akhirnya, Anda akan mengelompokkan dengan ekspresi seperti itu dan melakukan penghitungan berdasarkan id, seperti berikut
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)