如何在 SQL 中的表中平均周期数据

Posted

技术标签:

【中文标题】如何在 SQL 中的表中平均周期数据【英文标题】:How to average data on periods from a table in SQL 【发布时间】:2016-03-22 14:55:40 【问题描述】:

我正在尝试对特定时间段的数据进行平均,然后对这些结果之间的日期进行平均。

有如下数据:

 value |        datetime
-------+------------------------
    15 | 2015-08-16 01:00:40+02
    22 | 2015-08-16 01:01:40+02
    16 | 2015-08-16 01:02:40+02
    19 | 2015-08-16 01:03:40+02
    21 | 2015-08-16 01:04:40+02
    18 | 2015-08-16 01:05:40+02
    29 | 2015-08-16 01:06:40+02
    16 | 2015-08-16 01:07:40+02
    16 | 2015-08-16 01:08:40+02
    15 | 2015-08-16 01:09:40+02

我想在一个查询中获得类似的东西:

 value |        datetime
-------+------------------------
  18.6 | 2015-08-16 01:03:00+02
  18.8 | 2015-08-16 01:08:00+02

其中值对应于前 5 个初始值的平均值,而日期时间对应于 5 个初始日期时间的中间(或平均值)。 5代表区间n。

我看到一些帖子让我在 SQL 中使用 avg、group by 和平均日期格式走上了正轨,但我仍然不知道该怎么做。

我在 PostgreSQL 9.4 下工作

【问题讨论】:

您能否详细说明您是如何得出这些日期和值的? 当然,实际上这些数据是从测站测量中自动插入的。 不,您希望得到的结果。您为什么希望看到这两个特定时间? 好吧,这解释得还不够,很糟糕。从这些数据中,我想获得每个 n 结果的平均数据和日期。例如,对于每条输出的行,这对列值和日期时间将具有每 5 个缩写记录的数据和日期的平均值。 那么平均时间不应该是02和07吗? 【参考方案1】:

您需要分享更多信息,但这是一种方法。以下是有关它的更多信息:HERE

mysql> SELECT AVG(value), AVG(datetime)
        FROM database.table
        WHERE datetime > date1 
        AND datetime < date2;

【讨论】:

【参考方案2】:

有点像

SELECT
   to_timestamp(round(AVG(EXTRACT(epoch from datetime)))) as middleDate,
   avg(value) AS avgValue
FROM
   myTable
GROUP BY
   (id) / ((SELECT Count(*) FROM myTable) / 100);

大致满足了我的要求,平均间隔长度为 100(全局等于输出行)。

【讨论】:

以上是关于如何在 SQL 中的表中平均周期数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 或 PLSQL 将多行数据插入 Oracle 中的表中?

如何使用 node.js 将 sql 中的数据放入 html 中的表中

如何使用间隔 1 分钟在两个日期之间将时间序列数据生成到 Oracle PL/SQL 中的表中?

如何在 SQL 服务器中将数据插入到两个不同的表中,同时在 SQL 中具有 ORDER# 主键

如何从 SQL Server 中的表中获取不匹配的数据

如何使用表中的“时间戳”列选择一个小时内“值”列的平均值