加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在每小时范围内的汇总值

发布时间:2020-12-12 08:40:58 所属栏目:MsSql教程 来源:网络整理
导读:我有一个包含时间戳和测量值的表的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... ... 我需要在每个小时的8小时范围内平均值.换句话说,我需要平均1h-8h,2h-9h,3h-10h等 我
我有一个包含时间戳和测量值的表的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
...                  ...

我需要在每个小时的8小时范围内平均值.换句话说,我需要平均1h-8h,2h-9h,3h-10h等

我不知道如何进行这样的查询.我看到无处不在,但也没有任何线索寻找什么功能.

我找到的关闭是小时/每日平均值或块平均值(例如1h-8h,9h-16h等).但是在这些情况下,时间戳只是使用date_trunc()函数(如下面的示例)转换,这对我来说并不重要.

我想我正在寻找的是类似的功能

SELECT    date_trunc('day',timestamp),max(value) 
FROM      table_name
GROUP BY  date_trunc('day',timestamp);

但是,然后在group-by子句中每个小时使用某种8小时的范围.甚至有可能吗

解决方法

一个 window function with a custom frame使这令人惊讶的简单:
SELECT ts,avg(val) OVER (ORDER BY ts
                      ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;

Live demo on sqlfiddle.

每个平均值的帧是当前行加上以下7.这假设您每小时只有一行.您的样本数据似乎暗示,但您没有指定.

它的方式,avg_8h为最终(根据ts)集合的7行用较少的行计算,直到最后一行的值等于其自己的平均值.你没有具体说明如何处理这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读