Как получить большее значение два в каждом n-минутном периоде времени в TimescaleDB - PullRequest
2 голосов
/ 17 апреля 2020

Я хочу сравнить сумму двух атрибутов A и B между временными метками x и y для каждых 15 минут, чтобы получить большее значение в течение этого 15-минутного периода.

Таблица

id A B timestamp 1 5 10 2016-05-16 18:00:01 2 5 10 2016-05-16 18:15:00 3 15 5 2016-05-16 18:15:01 4 15 5 2016-05-16 18:30:00

Таким образом, запрос (x = 2016-05-16 18:00:01 и y = 2016-05-16 18:30:00), используемый с этой таблицей, должен вернуть:

value timestamp 20 2016-05-16 18:00:01 30 2016-05-16 18:15:01

Я думаю, что вам нужна какая-то комбинация выражения CASE и time_bucket ().

1 Ответ

1 голос
/ 17 апреля 2020

Вам нужна функция greatest. Он возвращает большее из двух значений, и вы можете передать агрегаты двух столбцов

SELECT 
  greatest(sum(a), sum(b)) as value, 
  time_bucket('15m', t, '1s'::interval) as t
FROM k
WHERE t >= '2016-05-16 18:00:01' AND t <= '2016-05-16 18:30:00'
GROUP BY 2;

Обратите внимание на третий аргумент в функции time_bucket. Временной интервал по умолчанию округляется до начала 15-метрового сегмента, третий аргумент используется для указания смещения. Из вашего примера я увидел, что вы хотите, чтобы корзины начинались со смещением 1 с.

...