Ich bin auf das gleiche Problem gestoßen.
Ich fand heraus, dass es einfach ist, nach Minutenintervallen zu gruppieren, indem man die Epoche in Minuten in Minuten teilt und dann entweder rundet oder den Boden verwendet, um den Rest zu fahren. Wenn Sie also ein Intervall von 5 Minuten erhalten möchten, würden Sie 300 Sekunden verwenden .
SELECT COUNT(*) cnt,
to_timestamp(floor((extract('epoch' from timestamp_column) / 300 )) * 300)
AT TIME ZONE 'UTC' as interval_alias
FROM TABLE_NAME GROUP BY interval_alias
interval_alias cnt
------------------- ----
2010-11-16 10:30:00 2
2010-11-16 10:35:00 10
2010-11-16 10:45:00 8
2010-11-16 10:55:00 11
Dadurch werden die Daten korrekt nach dem ausgewählten Minutenintervall gruppiert zurückgegeben. Es werden jedoch keine Intervalle zurückgegeben, die keine Daten enthalten. Um diese leeren Intervalle zu erhalten, können wir die Funktion generate_series verwenden .
SELECT generate_series(MIN(date_trunc('hour',timestamp_column)),
max(date_trunc('minute',timestamp_column)),'5m') as interval_alias FROM
TABLE_NAME
Ergebnis:
interval_alias
-------------------
2010-11-16 10:30:00
2010-11-16 10:35:00
2010-11-16 10:40:00
2010-11-16 10:45:00
2010-11-16 10:50:00
2010-11-16 10:55:00
Um nun das Ergebnis mit einem Intervall von null Vorkommen zu erhalten, verbinden wir beide Ergebnismengen nur von außen .
SELECT series.minute as interval, coalesce(cnt.amnt,0) as count from
(
SELECT count(*) amnt,
to_timestamp(floor((extract('epoch' from timestamp_column) / 300 )) * 300)
AT TIME ZONE 'UTC' as interval_alias
from TABLE_NAME group by interval_alias
) cnt
RIGHT JOIN
(
SELECT generate_series(min(date_trunc('hour',timestamp_column)),
max(date_trunc('minute',timestamp_column)),'5m') as minute from TABLE_NAME
) series
on series.minute = cnt.interval_alias
Das Endergebnis enthält die Serie mit allen 5-Minuten-Intervallen, auch ohne Intervalle.
interval count
------------------- ----
2010-11-16 10:30:00 2
2010-11-16 10:35:00 10
2010-11-16 10:40:00 0
2010-11-16 10:45:00 8
2010-11-16 10:50:00 0
2010-11-16 10:55:00 11
Das Intervall kann leicht geändert werden, indem der letzte Parameter von generate_series angepasst wird. In unserem Fall verwenden wir '5m', aber es kann jedes gewünschte Intervall sein .