我的问题与问here的问题相同,但所选答案为“假设您希望在每15分钟间隔后重新启动滚动平均值”。如果我不这样做怎么办?即如果我想为每一行和接下来的十五分钟行提供不同的滚动平均值,该怎么办?
答案 0 :(得分:1)
我会将其视为相关子查询:
select t.*,
(select avg(t2.col)
from t t2
where t2.timestamp >= t.timestamp and
t2.timestamp < t.timestamp + interval '15 minute'
) as future_15min_avg
from t;
这对窗口函数来说很有挑战性,因为窗口的大小可能会因每行而改变。
对于大量数据,有一种替代方法更麻烦但更有效。使用临时表可能最好。这个想法是:
您可以使用CTE尝试此操作,性能可能正常。但是,我认为指数可能对绩效很重要。并且,假设您在时间列上有索引,相关子查询即使对于数百或数千行也可能很好。