我想在时间窗口内尝试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秒
答案 0 :(得分:4)
RANGE PRECEDING is only supported with UNBOUNDED
是的... PostgreSQL的窗口功能还没有实现范围。
我有许多情况会对他们有用,但实施它们需要做很多工作,而且时间有限。
是否有任何方法可以实现avg()窗口函数的10秒窗口?
您需要在generate_series
上使用左连接(并且,如果合适的话,聚合)将范围转换为常规的行序列,在没有数据的情况下插入空行,并组合从一秒钟到多个值的多个数据。
然后,您在左连接和聚合数据上执行(ROWS n PRECEDING ...)
窗口,以获得移动平均值。