Postgres-Gruppe nach timestempel in 6 Stunden-Buckets

Ich habe die folgende einfache Tabelle:

ID TIMESTAMP VALUE 4 2011-05-27 15:50:04 1253 5 2011-05-27 15:55:02 1304 6 2011-05-27 16:00:02 1322 7 2011-05-27 16:05:01 1364 

Ich möchte die VALUES und jeden TIMESTAMP Tag in 6 Stunden-Buckets TIMESTAMP . zB 00:00 bis 06:00, 06:00 bis 12:00, 12:00 bis 18:00 und 18:00 bis 00:00 Uhr.

Ich bin in der Lage, anhand der folgenden Abfrage nach Jahr, Monat, Tag und Stunde zu gruppieren:

 select avg(VALUE), EXTRACT(year from TIMESTAMP) AS year, EXTRACT(month from TIMESTAMP) AS month, EXTRACT(day from TIMESTAMP) as day from TABLE group by year,month,day 

Aber ich bin nicht in der Lage, jeden Tag in 4 Perioden wie oben definiert zu gruppieren, jede Hilfe ist sehr willkommen.

Solutions Collecting From Web of "Postgres-Gruppe nach timestempel in 6 Stunden-Buckets"

Ich denke, die Gruppierung des ganzzahligen Wertes des Quotienten der (Stunde deines timestempels / 6) sollte helfen. Probieren Sie es aus und sehen Sie, ob es hilft. Deine Gruppe sollte so etwas wie sein

 group by year, month, day, trunc(EXTRACT(hour from TIMESTAMP) / 6) 

Die Logik dahinter ist, dass, wenn der Stundenanteil des dates durch 6 geteilt wird, die int-Werte nur sein können

  0 - 0:00 - 5:59:59 1 - 6:00 - 11:59:59 2 - 12:00 - 17:59:59 3 - 18:00 - 23:59:59 

Gruppierung mit diesem sollte Ihre data in 4 Gruppen pro Tag, was Sie brauchen.