PostgreSQL / Запрос TimescaleDB, который группирует данные по настраиваемому интервалу - PullRequest
1 голос
/ 03 августа 2020

У меня есть рабочий запрос, который позволяет мне суммировать value поле каждый день.

SELECT sum(value) as sum_value, to_char(time::date,'DD-MM-YY') as day 
FROM "measures"  
GROUP BY "day" 
ORDER BY "day" asc

Можно ли сделать тот же запрос, но вместо группировки по дням, группируя его по 2 дням , или указанная c продолжительность (только дни, а не часы)

1 Ответ

0 голосов
/ 03 августа 2020

Вы можете использовать функцию timescaledb extension time_bucket(), как прокомментировал @Mike Organek, или использовать собственное преобразование PosgreSQL данных, например:

SELECT 
    sum(value) as sum_value, 
    to_char(time::date,'DD-MM-YY') as day,
    floor(extract(epoch from "time")/(60*60*24*2)) as time_bucket
FROM "measures"  
GROUP BY "time_bucket" 
ORDER BY "day" asc;

В приведенном выше запросе мы извлекаем unixtime из столбца datetime, делим его на период группировки в секундах (60 * 60 * 24 * 2 - означает 2 дня или 48 часов) и округлить его для использования в группу по оператору

...