Ich habe eine Tabelle von Finanzdaten mit folgendem Schema:Wie schreibe ich eine Abfrage für die Aggregation von Forex Candle-Daten?
Table "public.candles"
Column | Type | Modifiers
------------+----------------+-----------
posix_time | bigint | not null
low | numeric(8,2) | not null
high | numeric(8,2) | not null
open | numeric(8,2) | not null
close | numeric(8,2) | not null
volume | numeric(23,16) | not null
Indexes:
"candles_pkey" PRIMARY KEY, btree (posix_time)
Jede Kerze erstreckt sich über einen Ein-Minuten-Intervall. Ich möchte die Daten in Kerzen aggregieren Intervallen von 5 Minuten Spanning, 1 Stunde, 1 Tag, usw.
kann ich aggregieren posix_time
, high
, low
und volume
über fünf Minuten-Intervallen mit
SELECT posix_time/(60*5)*(60*5) AS new_posix_time,
max(high) AS new_high,
min(low) AS new_low,
sum(volume) AS new_volume
FROM candles
GROUP BY new_posix_time
und berechnet die die neuen open
und close
Werte mit der entsprechenden Änderung der
SELECT posix_time/(60*5)*(60*5) AS new_posix_time,
open AS new_open
FROM (SELECT open,
posix_time,
ROW_NUMBER() OVER (PARTITION BY posix_time/(60*5)*(60*5)
ORDER BY posix_time ASC) AS r
FROM candles
) AS o
WHERE o.r = 1
wie invorgeschlagen, aber ich kann nicht herausfinden, wie man sie zu einer Abfrage kombiniert.
Muss ich Joins verwenden? Unterabfragen? Die Abfrage komplett neu strukturieren?
Es scheint, dass dies nur eine alternative Form der ersten Abfrage ist. Wie würde ich das verwenden, um die Spalten "open" und "close" zu aggregieren? – Bryan