Postgresql TimescaleDB查询以选择列值已从上一行更改的行

Postgresql TimescaleDB查询以选择列值已从上一行更改的行,postgresql,timescaledb,Postgresql,Timescaledb,最近刚开始使用TimescaleDB和postgrest来处理大多数数据请求 然而,我遇到了一个问题,我对时间序列数据的请求效率极低 它是一个数据系列,可以是任意长度的时间,具有特定的整数值 大多数情况下,除非出现异常,否则该值将是相同的。因此,不需要获取+10000行数据。我想将其聚合为时间块 假设一行中有97个项目,其中每5分钟的值为100个新项目98一行中的5个项目的值为48,然后在另外2900行中返回到100 我不想获取3002项来显示此数据。我只需要取3件东西 1项表示起始日期的值为1

最近刚开始使用TimescaleDB和postgrest来处理大多数数据请求

然而,我遇到了一个问题,我对时间序列数据的请求效率极低

它是一个数据系列,可以是任意长度的时间,具有特定的整数值

大多数情况下,除非出现异常,否则该值将是相同的。因此,不需要获取+10000行数据。我想将其聚合为时间块

假设一行中有97个项目,其中每5分钟的值为100个新项目98一行中的5个项目的值为48,然后在另外2900行中返回到100

我不想获取3002项来显示此数据。我只需要取3件东西

1项表示起始日期的值为100 1项表示1之后起始日期的值为48 1项表示2之后起始日期的值再次为100 但我在想如何使用timescaledb实现这一点时遇到了一些困难

基本上,如果该值与上一个值相同,则将其聚合。这就是我所需要做的


是否有人知道如何使用连续聚合在timescaleDB中构建这种情况的视图,或者是否有更快的方法获取此视图?

您可以使用窗口函数和子选择来实现所需的结果:

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的所有行