RANGE PRECEDING仅受UNBOUNDED支持

时间:2014-11-06 23:09:57

标签: postgresql

我想在时间窗口内尝试avg()聚合 sql代码

select
user_id,timestamp
avg(y) over(range between '5 second' preceding and '5 second' following),
from A

但系统报告错误

RANGE PRECEDING is only supported with UNBOUNDED

是否有任何方法可以实现avg()窗口函数的10秒窗口?

窗口函数的帧宽度范围从当前行的时间戳之前的n秒和当前行的时间戳之后的m秒

1 个答案:

答案 0 :(得分:4)

 RANGE PRECEDING is only supported with UNBOUNDED

是的... PostgreSQL的窗口功能还没有实现范围。

我有许多情况会对他们有用,但实施它们需要做很多工作,而且时间有限。

  

是否有任何方法可以实现avg()窗口函数的10秒窗口?

您需要在generate_series上使用左连接(并且,如果合适的话,聚合)将范围转换为常规的行序列,在没有数据的情况下插入空行,并组合从一秒钟到多个值的多个数据。

然后,您在左连接和聚合数据上执行(ROWS n PRECEDING ...)窗口,以获得移动平均值。