Ich verwende Postgres (RDS) zum Speichern von Zeitreihendaten.Postgresql Zeitreihenintervall
Lassen Sie uns sagen, dass meine Daten wie folgt aussehen:
- Zeitstempel: (Index und Partitionsschlüssel)
- Quelle: Integer Index
- Daten: Binary json enthält die Daten,
timestamp | source | data ---------------------+----------+------------------ 2017-01-24 19:24:41 | 1 | { some jsonb } 2017-01-24 19:25:41 | 1 | { some jsonb } 2017-01-24 19:25:41 | 2 | { some jsonb } 2017-01-24 19:26:41 | 3 | { some jsonb } 2017-01-24 19:32:41 | 1 | { some jsonb } 2017-01-24 19:33:41 | 2 | { some jsonb } 2017-01-24 19:45:41 | 3 | { some jsonb } 2017-01-24 19:50:41 | 1 | { some jsonb } 2017-01-24 19:56:41 | 1 | { some jsonb } 2017-01-24 20:01:41 | 1 | { some jsonb }
Ich möchte um die Daten nach source
zu sortieren und die Daten nach Intervall zu teilen, sagen wir mal geteilt durch ein 15-Minuten-Intervall. Ich möchte auch round
die Zeit, wenn es auf Intervall aufgeteilt wird.
Bisher habe ich
SELECT date_trunc('hour', timestamp) + date_part('minute', timestamp)::int/15 * interval '15 min' AS fifteen_minutes, data
FROM MY_TABLE
where source=1
GROUP BY data, fifteen_minutes
ORDER BY fifteen_minutes desc
Welche kehrt
fifteen_minutes | source | data ---------------------+----------+------------------ 2017-01-24 19:15:00 | 1 | { some jsonb } 2017-01-24 19:15:00 | 1 | { some jsonb } 2017-01-24 19:30:00 | 1 | { some jsonb } 2017-01-24 19:45:00 | 1 | { some jsonb } 2017-01-24 19:45:00 | 1 | { some jsonb } 2017-01-24 20:00:00 | 1 | { some jsonb }
Das Problem ist, dass ich immer noch mehrere Ergebnisse für jedes Intervall zu bekommen. Ich möchte durch das Intervall zu distinct
und erhalten den nächsten Zeitstempel
Idealerweise würde ich bekommen: (Einzel Ergebnis pro Intervall)
fifteen_minutes | source | data ---------------------+----------+------------------ 2017-01-24 19:15:00 | 1 | { some jsonb } 2017-01-24 19:30:00 | 1 | { some jsonb } 2017-01-24 19:45:00 | 1 | { some jsonb } 2017-01-24 20:00:00 | 1 | { some jsonb }
Jede bessere Idee? Danke!
Bitte senden Sie das erwartete Ausgabe auf der Grundlage der obigen Daten – GurV
Für eine Quelle und jeder 15-minütigen Eimer, wie werden Sie welcher Wert von „Daten“ entscheiden zu benutzen? –
der "nächste" Wert für ex ' von '2017-01-24 19: 24: 41' oder' 2017-01-24 19: 25: 41' => '19: 24: 41' ist am nächsten an 19: 15. Zur Zeit bearbeitet der Code diese Logik durch eine Karte, die die Ergebnisse reduziert –