基于PostgreSQL中的时间戳的移动平均线

基于PostgreSQL中的时间戳的移动平均线,第1张

概述我想通过时间戳来执行移动平均线. 我有两列:温度和时间戳(时间 – 日期),我想根据连续的温度观测每15分钟执行移动平均.换句话说,选择数据以执行基于15分钟时间间隔的平均值.此外,可以对不同的时间序列具有不同数量的观测值.我的意思是所有的窗口大小相等(15分钟),但是可以在每个窗口中有不同的观察次数. 例如: 对于第一个窗口,我们必须计算n次观察的平均值,而第二个窗口计算n 5次观测的平均值. 我想通过时间戳来执行移动平均线.
我有两列:温度和时间戳(时间 – 日期),我想根据连续的温度观测每15分钟执行移动平均.换句话说,选择数据以执行基于15分钟时间间隔的平均值.此外,可以对不同的时间序列具有不同数量的观测值.我的意思是所有的窗口大小相等(15分钟),但是可以在每个窗口中有不同的观察次数.
例如:
对于第一个窗口,我们必须计算n次观察的平均值,而第二个窗口计算n 5次观测的平均值.

资料样本:

ID   Timestamps          Temperature1    2007-09-14 22:56:12 5.392    2007-09-14 22:58:12 5.343    2007-09-14 23:00:12 5.164    2007-09-14 23:02:12 5.545    2007-09-14 23:04:12 5.306    2007-09-14 23:06:12 5.207    2007-09-14 23:10:12 5.398    2007-09-14 23:12:12 5.349    2007-09-14 23:20:12 5.1610   2007-09-14 23:24:12 5.5411   2007-09-14 23:30:12 5.3012   2007-09-14 23:33:12 5.2013   2007-09-14 23:40:12 5.3914   2007-09-14 23:42:12 5.3415   2007-09-14 23:44:12 5.1616   2007-09-14 23:50:12 5.5417   2007-09-14 23:52:12 5.3018   2007-09-14 23:57:12 5.20

主要挑战:

由于采样频率不同,每隔15分钟就不会有15分钟的时间间隔来学习代码.

假设您要在每15分钟间隔后重新启动滚动平均值:
select ID,temp,avg(temp) over (partition by group_nr order by time_read) as rolling_avgfrom (         select ID,time_read,interval_group,ID - row_number() over (partition by interval_group order by time_read) as group_nr  from (    select ID,'epoch'::timestamp + '900 seconds'::interval * (extract(epoch from time_read)::int4 / 900) as interval_group,temp    from readings  ) t1) t2order by time_read;

它基于Depesz’s solution按“时间范围”分组:

这是一个sqlfiddle示例:http://sqlfiddle.com/#!1/0f3f0/2

总结

以上是内存溢出为你收集整理的基于PostgreSQL中的时间戳的移动平均线全部内容,希望文章能够帮你解决基于PostgreSQL中的时间戳的移动平均线所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1169722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存