最近刚开始将TimescaleDB与postgrest一起使用来处理大多数数据请求。
但是,我遇到了一个问题,即我对数据时间序列的请求效率极低。
这是一个数据序列,可以是任意时间长度,具有特定的Integer值。
在大多数情况下,除非出现异常,否则值将保持不变。因此,而不是获取+10,000行数据。我想将其汇总为“时间块”。
假设某行中有97个项目,其值为100(每5分钟有一个新项目)#98连续5个项目的值为48,然后又返回了2,900行中的100。 / p>
我不想获取3002个项目来显示此数据。我只需要获取3个项目。
但是我在弄清楚如何使用timescaledb做到这一点时遇到了麻烦。
基本上,如果该值与最后一个值相同,则将其汇总。这就是我要做的全部。
有人知道如何使用连续聚合(或者是否有更快的方法)在timescaleDB中针对这种情况构造VIEW?
答案 0 :(得分:2)
您可以通过窗口功能和子选择来获得所需的结果:
SELECT time, value FROM (
SELECT
time,
value,
value - LAG(value) OVER (ORDER BY time) as diff
FROM hypertable) ht
WHERE diff IS NULL OR diff != 0;
您可以使用窗口函数计算与上一行的差异,然后在外部查询中过滤差异为0的所有行。