У меня есть таблица с именем trades
для проведения валютных торговых данных со следующей схемой:Выбор первой и последней строки в пределах временного интервала
id - uuid
timestamp - timestamp without time zone
price - numeric
Я хотел бы иметь возможность запросить таким образом, что я могу построить свечной график. Для этого мне нужно первую цену, то цена последней, цена макс и минимальная цена, сгруппированных по интервалам времени. До сих пор у меня есть это:
CREATE FUNCTION ts_round(timestamptz, INT4) RETURNS TIMESTAMPTZ AS $$
SELECT 'epoch'::timestamptz
+ '1 second'::INTERVAL * ($2 * (extract(epoch FROM $1)::INT4/$2));
$$ LANGUAGE SQL;
SELECT ts_round(timestamp, 300) AS interval_timestamp
, max(price) AS max, min(price) AS min
FROM trades
GROUP BY interval_timestamp
ORDER BY interval_timestamp DESC
Как получить первой цены и цена последней в пределах этих интервалов?
Как вы определяете «первую цену» и «последнюю цену»? По метке времени? –
Я серьезно сомневаюсь, что ваша функция делает то, что вы на самом деле хотите. Это эффективно * усечение * до * n * -секундных интервалов, после * округления * до полных секунд. Я подозреваю, что вы действительно хотите либо усечь ***, либо *** округлить до * n * -секундных интервалов. Правильно? –
Возможный дубликат [заданное время/интервал для вычисления значения open/high/low/close в каждой сгруппированной информации] (http://stackoverflow.com/questions/27399054/given-time-interval-to-calculate-open-high -low-close-value-in-each-grouped-data) – radar