我有一个关系数据库(postgres),其中的一个表包含时间序列指标。每行包含-obj_id, metric_id, timestamp, value
-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。
我考虑过可能使用自我联接,通过时间戳联接同一表的两个内部选择。
从转换boolean为integer0或1
boolean
integer0
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