如何在 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 中的表中?