Как сгруппировать такой sql запрос?

Есть таблица с полями

-id  
-Currencies //Название -валюта1 к валюте2
-DateTime   //Дата и время запроса
-Volume     //Объём торгов на текущую дату
-Last       //Отношение валюты1 к валюте2, тобеж цена

Я хочу сгруппировать кучу строк по 10 минут и вывести объёмы торгов,среднюю цену за эти промежутки и разницу отклонения от предыдущего запроса(то-есть 20 минут назад объём 5.......10 минут назад объём 7 ....значит вывести =2, по такому типу и среднюю цену)

Я сделал такой запрос

select
  c1.cur,
  generate_series
        ( now()- INTERVAL '1 day'
        , now()::timestamp
        , '10 minutes'::interval) as dd,
  MAX(c1.volume) OVER () AS Volume, 
  round( AVG(c1.last)::numeric,8) as price_m,
  MIN(c1.last) as min_price,
  MAX(c1.last) as max_price,
  round((MAX(c1.last) - MIN(c1.last))::numeric,8) AS delta_price,
  round((MAX(c1.last) / MIN(c1.last)-1)::numeric,8) AS delta_procent_price
--Вот здесь хочу ещё вывести поле цены, относительно предыдущей цены, но не получается 
  --lag(c1.last) OVER(ORDER BY datetime DESC )  as lag_last

from currencies c1 
WHERE c1.cur='BTC-XRP'

GROUP BY volume,   c1.cur 
order by volume,c1.cur


Сейчас у меня отображаются даты с интервалом в 10 минут, но все остальные строки все одинаковые- Если же добавляю в группировку ещё другие поля, то всё-равно так же
  • Вопрос задан
  • 1016 просмотров
Пригласить эксперта
Ответы на вопрос 1
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Сейчас нет времени попробовать, но я бы сделал так:
1) ввел дополнительное поле для группировки/сортировки по временному интервалу (ваши десятиминутки). Скорее всего что-то типа целое число от деления секунды_от_начала_дня на 600 (10 минут в секундах);
3) группируем все, что нужно по этому полю;
3) присоединил точно такой же запрос с этим самым полем к нашей таблице (join), но со смещением (связываем таблицы по вычисленному полю t1.group-id = t2.group-id - 1).
4) вычислил недостающие вещи: разницу между соседними временными интервалами
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы