PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment le tri d'objets dans des buckets peut-il être formulé comme une expression JPQL valide ?

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)