Trước hết, bạn cần một cách JPA để tính toán sự khác biệt giữa startDate
và pageDate
trong đơn vị tương ứng, hơi khó lập công thức vì nó rất phụ thuộc vào cơ sở dữ liệu. Cuối cùng, bạn sẽ cần một số chức năng tùy chỉnh hoặc viết một truy vấn JPQL rất phức tạp.
Tính toán ngày giữa hai ngày trong PostgreSQL dễ dàng như thực hiện date_part('day', t2 - t1)
. Đối với những giờ bạn đã cần date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
và phút date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
Để sử dụng các hàm cơ sở dữ liệu này trong JPQL, bạn có thể sử dụng FUNCTION
cú pháp như FUNCTION('date_part', 'day', :startDate - pageDate)
.
Cuối cùng, bạn sẽ nhóm theo một biểu thức như vậy và thực hiện đếm theo id, giống như sau
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)