PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann das Sortieren von Objekten in Buckets als gültiger JPQL-Ausdruck formuliert werden?

Zunächst benötigen Sie eine JPA-Methode zur Berechnung der Differenz zwischen startDate und pageDate in der jeweiligen Einheit, was etwas schwer zu formulieren ist, weil es sehr datenbankabhängig ist. Am Ende benötigen Sie einige benutzerdefinierte Funktionen oder schreiben eine sehr komplizierte JPQL-Abfrage.

Die Berechnung der Tage zwischen zwei Daten in PostgreSQL ist so einfach wie date_part('day', t2 - t1) . Für die Stunden benötigen Sie bereits date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1) und Minuten date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1) .

Um diese Datenbankfunktionen in JPQL zu verwenden, können Sie die FUNCTION verwenden Syntax wie FUNCTION('date_part', 'day', :startDate - pageDate) .

Am Ende werden Sie nach einem solchen Ausdruck gruppieren und nach ID zählen, etwa wie folgt

SELECT COUNT(o.id) FROM MyObject o GROUP BY FUNCTION('date_part', 'day', :startDate - o.pageDate)