SELECT date_trunc('hour', date1) AS hour_stump
, (extract(minute FROM date1)::int / 5) AS min5_slot
, count(*)
FROM table1
GROUP BY 1, 2
ORDER BY 1, 2;
Você pode
GROUP BY
duas colunas:um carimbo de data/hora truncado para a hora e um intervalo de 5 minutos. O exemplo produz slots
0 - 11
. Adicionar 1
se preferir 1 - 12
.Eu converto o resultado de
extract()
para inteiro, então a divisão / 5
trunca dígitos fracionários. O resultado:minuto 0 - 4 -> slot 0
minuto 5 - 9 -> slot 1
etc.
Essa consulta retorna apenas valores para os intervalos de 5 minutos em que os valores são encontrados. Se você quiser um valor para cada slot ou se você quiser uma soma corrente mais de 5 minutos, considere esta resposta relacionada:
- PostgreSQL:contagem de linhas em execução para uma consulta 'por minuto'