PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como a classificação de objetos em buckets pode ser formulada como uma expressão JPQL válida?


Em primeiro lugar, você precisa de uma maneira JPA de calcular a diferença entre o startDate e pageDate na respectiva unidade, o que é um pouco difícil de formular porque é muito dependente do banco de dados. No final, você precisará de algumas funções personalizadas ou escrever uma consulta JPQL muito complicada.

Calcular os dias entre duas datas no PostgreSQL é tão fácil quanto fazer date_part('day', t2 - t1) . Para as horas você já precisa de date_part('day', t2 - t1) * 24 + date_part('hour', t2 - t1) e minutos date_part('day', t2 - t1) * 24 * 60 + date_part('hour', t2 - t1) * 60 + date_part('minute', t2 - t1) .

Para usar essas funções de banco de dados em JPQL, você pode usar a função FUNCTION sintaxe como FUNCTION('date_part', 'day', :startDate - pageDate) .

No final, você estará agrupando por tal expressão e fará uma contagem por id, algo como o seguinte

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