gpt4 book ai didi

postgresql - 条件时间序列数据聚合

转载 作者:行者123 更新时间:2023-11-29 12:43:51 25 4
gpt4 key购买 nike

我有一个关系数据库 (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_idtimestamp 过滤出结果。

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

最佳答案

SQL Fiddle

booleaninteger 的转换产生 0 或 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

关于postgresql - 条件时间序列数据聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35728260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com