У меня есть реляционная БД (postgres) с таблицей, которая содержит метрики временного ряда. Каждая строка состоит из - obj_id, metric_id, timestamp, value
Условная агрегация данных временного ряда
Предположим, у меня есть 3 метрики интереса с кодами - 1, 4, 5. Я хотел бы отфильтровать все объекты, которые для одной и той же метки времени (предположим, что метка времени для всех показателей имеет фиксированные интервалы), имеют метрику 1 < 10 и (метрическая 4 + метрика 5) < 10 с определенной меткой времени, что это произошло событие.
Более конкретный пример:
obj_id metric_id timestamp value
------------------------------------------------------
1 1 83827 9
1 4 83827 2
1 5 83827 1
2 1 73261 11
2 4 73261 2
2 5 73261 5
1 1 92381 24
1 4 92381 10
1 5 92381 100
2 1 38239 7
2 4 38239 3
2 5 38239 4
Ожидаемый результат будет:
obj_id timestamp
---------------------
1 83827
2 38239
Я пытаюсь создать эффективный запрос, чтобы сделать. Вот что я имел в виду, чтобы получить сумму 4 + 5 за ту же метку времени, но я не уверен, что будет лучшим способом, чтобы склеить эти запросы вместе:
SELECT obj_id, timestamp, sum(value) AS x
FROM metric
WHERE metric_id = 4 OR metric_id = 5
group by obj_id, timestamp
Я не уверен, как добавить к этому запросу метрику 1 (которую мы должны запросить отдельно), а затем отфильтровать результаты на obj_id
и timestamp
.
Я подумал о том, что, возможно, используя самостоятельное соединение, соединяя два внутренних выбора одной таблицы с меткой времени.
Абсолютно блестящий и работает как шарм, и я даже могу его прочитать. Благодаря! – Avi