use*_*853 13 sql postgresql datetime window-functions postgresql-9.1
我有一个PostgreSQL 9.1数据库,其中包含一个包含时间戳和测量值的表
'2012-10-25 01:00' 2
'2012-10-25 02:00' 5
'2012-10-25 03:00' 12
'2012-10-25 04:00' 7
'2012-10-25 05:00' 1
... ...
Run Code Online (Sandbox Code Playgroud)
我需要在每小时8小时的范围内平均值.换句话说,我需要平均1h-8h,2h-9h,3h-10h等.
我不知道如何进行这样的查询.我到处寻找,但也不知道要寻找什么功能.
我发现的关闭是每小时/每日平均值或平均值(例如1小时-8小时,9小时-16小时等).但在这些情况下,时间戳只是使用date_trunc()
函数转换(如下例所示),这对我没用.
我认为我正在寻找的是与此类似的功能
SELECT date_trunc('day', timestamp), max(value)
FROM table_name
GROUP BY date_trunc('day', timestamp);
Run Code Online (Sandbox Code Playgroud)
但是在分组条款中每小时使用一些8小时的范围.这甚至可能吗?
一个具有自定义框架窗口的功能,使这个非常简单:
SELECT ts
,avg(val) OVER (ORDER BY ts
ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
每个平均值的框架是当前行加上以下7.这假设您每小时只有一行.您的示例数据似乎意味着,但您没有指定.
它的方式是,avg_8h
对于最后的(根据ts
)7行,用较少的行计算,直到最后一行的值等于它自己的平均值.您没有指定如何处理特殊情况.
归档时间: |
|
查看次数: |
4859 次 |
最近记录: |