Tout d'abord, vous avez besoin d'un moyen JPA de calculer la différence entre le startDate
et pageDate
dans l'unité respective, ce qui est quelque peu difficile à formuler car il dépend beaucoup de la base de données. En fin de compte, vous aurez besoin de fonctions personnalisées ou d'écrire une requête JPQL très compliquée.
Calculer les jours entre deux dates dans PostgreSQL est aussi simple que de faire date_part('day', t2 - t1)
. Pour les heures dont vous avez déjà besoin date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1)
et minutes date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1)
.
Pour utiliser ces fonctions de base de données dans JPQL, vous pouvez utiliser la FUNCTION
syntaxe comme FUNCTION('date_part', 'day', :startDate - pageDate)
.
À la fin, vous regrouperez par une telle expression et ferez un décompte par identifiant, quelque chose comme ce qui suit
SELECT COUNT(o.id)
FROM MyObject o
GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)