当前位置: 首页 > 面试题库 >

每小时汇总几个小时范围内的值

祁鸿晖
2023-03-14
问题内容

我有一个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小时范围。那有可能吗?


问题答案:

一个 具有自定义框架窗口的功能 ,使这个 非常简单

SELECT ts
      ,avg(val) OVER (ORDER BY ts
                      ROWS BETWEEN CURRENT ROW AND 7 FOLLOWING) AS avg_8h
FROM tbl;

sqlfiddle上的实时演示。

每个平均值的框架是当前行加上随后的7。这假设您每小时每小时只有一排。您的样本数据似乎暗示了这一点,但您未指定。

对于该集合avg_8h的最后ts7个行(根据)用更少的行进行计算的方式是,直到最后一行的值等于其自己的平均值为止。您没有指定如何处理特殊情况。



 类似资料:
  • 问题内容: 因此,我试图生成的是特定时间范围内的所有小时。 因此,鉴于范围从上午11点到下午2:00,我将得到: 我试图避免必须在商店每隔特定的小时存储一次,而只存储范围(我需要将小时数与其他时间进行比较) 谢谢 问题答案: 如果您有数字表(如果没有,请单击链接以创建一个表)… 如果这是专门的,则可以创建仅包含24个值的小时表。

  • 问题内容: 我有一个具有以下结构和示例数据的表: 我需要获取每个STORE_ID的每小时总计TOTAL_AMOUNT。我尝试了以下查询,但我不知道它是否正确。 问题答案:

  • 问题内容: 我有一个域服务器elasticsearch: ,与(其中包括) 我只想在一个小时介于上午8点至晚上8点之间的情况下,为一个月的用户总计byte_down值 我可以通过以下查询获取带有日期直方图的每日总计(我在这里使用的是perl API),但无法找到一种将每天的小时数减少到小时范围的方法 谢谢戴尔 问题答案: 我认为您需要使用过滤器而不是过滤器,然后将其放在方面中:

  • 使用的解决方案类似于microsoft文档中的内容:https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.linq.documentQueryable.asdocumentQuery?view=azure-dotnet 我们目前正在将我们的数据解决方案转移到cosmosDB,这就是我们如何注意到这个问题的。你知道

  • 我正在尝试编写一个脚本,在两列数据中分别给出两个小时之间的每个小时。 永远不会有一个负整数,列表只包含数字0-23。以下是示例数据: 所以,我需要它来打印; 七点八点 7:00, 8:00, 9:00 8:00, 9:00, 10:00, 11:00, 12:00, 13:00 等 我需要用一个计数器来计数每一次发生了多少次。

  • 问题内容: 如何在几天,几小时,几周或几个月后迭代一个时间跨度? 就像是: 其中foo是一个函数,返回一个迭代器。我一直在研究日历模块,但是它仅适用于特定的一年或一个月,不适用于日期之间。 问题答案: 使用dateutil及其rrule实现,如下所示: 输出为 将“每月”替换为“每年”,“每月”,“每周”,“每天”,“每小时”,“半年”或“第二”。替换dtstart,直到您想要的任何datetim