Ich bin ein Neuling mit Datenbank, also suche ich Ihre Hilfe bei dieser.
Ich habe eine Tabelle mit Zeitreihendaten.
2012/01/01 00:10, 10
2012/01/01 00:30, 5
2012/01/01 01:00, 10
2012/01/01 01:40, 10
2012/01/01 02:00, 20
In der Tabelle werden intervallbasierte Daten gespeichert, indem nur die Obergrenze des Intervalls beibehalten wird. Zum Beispiel repräsentiert die erste Zeile ein Intervall von [00:00 - 00:10] mit einem Wert von 10, die zweite Zeile repräsentiert ein Intervall von (00:10 - 00:30] mit einem Wert von 5 und die dritte repräsentiert ein Intervall von (00:30 - 01:00) mit einem Wert von 10.
Ich benötige eine effiziente Abfrage in Postgres, um stündliche Daten für eine Struktur wie die oben beschriebene zu aggregieren. Das Ergebnis wäre also ungefähr so:
2012/01/01 00:00, 2012/01/01 01:00, 25
2012/01/01 01:00, 2012/01/01 02:00, 30
Beachten Sie, dass die Zeitreihendaten sehr groß sind. Daher wäre jede Hilfe bei der Indizierung sehr willkommen.
Danke, dan
2012/01/01 00:10, 10
alle diese Werte in einer einzelnen Spalte, oder ist das Komma ein Spaltenbegrenzer? Werden die genauen Stunden (1:00, 2:00, 3:00 usw.) garantiert in der Zeitreihentabelle gespeichert, oder wird möglicherweise die: 00 übersprungen und es werden Einträge wie2012/01/01 03:50
gefolgt von2012/01/01 04:10
?2012/01/01 04:00, 2012/01/01 05:00, 0
? oder sollte diese Stunde einfach in der Zusammenfassung weggelassen werden?Antworten:
siehe sqlfiddle
Was den Index
date_trunc('hour', t - interval '1 minute')
betrifft : Sie könnten einen Funktionsindex anprobieren, aber ich bin nicht sicher, ob postgresql ihn verwenden kann.quelle