postgresql可以对滚动数据做平均吗?我有这样的情况,我需要平均5天的值,并在等待实际值的同时填满所有的日子,所以基本上如果我今天在第6天,我的公式将是第1-5天,然后第7天将是2-6天,但第6天的值来自今天的平均值,等等。您可以看到下面的值。我一直在搜索SQL是否可以做到这一点,但找不到任何功能。我只找到了recursive,但在postgres中不可用。
样本表
x1c 0d1x的数据
postgresql可以对滚动数据做平均吗?我有这样的情况,我需要平均5天的值,并在等待实际值的同时填满所有的日子,所以基本上如果我今天在第6天,我的公式将是第1-5天,然后第7天将是2-6天,但第6天的值来自今天的平均值,等等。您可以看到下面的值。我一直在搜索SQL是否可以做到这一点,但找不到任何功能。我只找到了recursive,但在postgres中不可用。
样本表
x1c 0d1x的数据
2条答案
按热度按时间ajsxfq5m1#
计算具有缺失值替换的滚动均值的关键是维护保存对均值有贡献的值的缓冲区。下面的查询演示了如何使用递归CTE和一个包含贡献值的数组来计算滚动均值:
字符串
我没有访问PostgreSQL 9.1数据库的权限,所以我只在PostgreSQL 15.3中运行了这个。可能需要对旧版本进行一些更改;然而,一般概念仍然适用。
s4n0splo2#
您可以使用窗口版本的avg()函数获得所需的5天运行平均值,请参阅here和here with demo here。
字符串
好吧,至少你得到了你想要的,5天前的平均水平。然而,你不能得到你在
sample table
中所拥有的,因为第6天到第10天没有有效的值,我不打算告诉你什么值会导致你的姿势结果。注:演示实际上使用v15运行。由于db<>fiddle不再支持v9.1,但文档参考是v9.1。