У меня есть значения по минутам, и я пытаюсь пересчитать их по часам.Поскольку они являются ценами на акции, у меня есть открытые и закрытые столбцы.При пересчете мне нужно в открытых столбцах держать цену с первой минуты каждого часа ...
Было бы что-то вроде этого, если бы была функция агрегации FIRST
:
SELECT date_trunc('hour', date_) AS date_by_hour,
FIRST("open") AS "open", MAX(high) AS high, MIN(low) AS low, LAST("close") AS "close", AVG(weighted_price) AS price
FROM btc_usd
GROUP BY 1
пример:
open,high,low,close,date_
262.50,262.20,262.80,262.28,2015-01-27 16:22:00
262.20,262.20,262.28,262.28,2015-01-27 16:23:00
262.15,262.15,262.15,262.15,2015-01-27 16:24:00
262.15,262.15,262.15,262.15,2015-01-27 16:25:00
262.09,262.15,262.09,262.15,2015-01-27 16:26:00
262.07,262.20,261.87,262.28,2015-01-27 16:27:00
262.10,262.10,262.18,262.18,2015-01-27 16:28:00
262.10,262.10,262.18,262.18,2015-01-27 16:29:00
262.15,262.50,262.15,262.49,2015-01-27 16:30:00
даст:
open,high,low,close,date_
262.50,262.50,261.87,262.49,2015-01-27 16:00:00
ОБНОВЛЕНИЕ:
SELECT DISTINCT ON
( date_trunc( 'hour', date_ )) "open", date_
FROM btc_usd
ORDER BY date_trunc( 'hour', date_ ), date_
это дает первое и с помощью DESC
на закрытии я могу получитьпоследний