小编典典

条件时间序列数据聚合

sql

我有一个关系数据库(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。

我考虑过可能使用自我联接,通过时间戳联接同一表的两个内部选择。


阅读 176

收藏
2021-04-15

共1个答案

小编典典

从转换booleaninteger0或1

select obj_id, timestamp
from metric
where metric_id in (1,4,5)
group by obj_id, timestamp
having
    sum(value * (metric_id in (4,5))::integer) < 10
    and
    sum(value * (metric_id = 1)::integer) < 10
2021-04-15