我有一个温度数据表,由多个传感器每 5-15 分钟更新一次。 数据本质上是这样的:唯一 ID、设备(传感器 ID)、时间戳、值( float ) 传感器没有准确的时钟,所以读数注定会随着时间的推移而出现偏差,所以我无法在 mysql 中使用诸如按小时分组之类的东西来读取最近 24 小时的温度数据。 作为一名 php 程序员,我的解决方案是制作一个预处理器,读取所有未处理的读数并将它们“加入”到一个表中。 除了我之外,肯定还有其他人需要将 x 分钟/小时的读数“缩小”到每小时一次,以便在比方说绘图中使用。
我的问题是如何根据一个或多个读数计算四舍五入的小时值。
例如,我在 2.5 小时内有 12 个读数,对于所有这些读数,我需要每个整小时的明确值。
数据:
Date Device Value
2016-06-27 12:15:15, TA, 23.5
2016-06-27 12:30:19, TA, 23.1
2016-06-27 12:45:35, TA, 22.9
2016-06-27 13:00:55, TA, 22.5
2016-06-27 13:05:15, TA, 22.8
2016-06-27 13:35:35, TA, 23.2
我不太喜欢统计数学,所以“标准偏差”之类的东西对我来说是俄罗斯的城市。
此外,设备有时会进入休眠状态,并不总是传输温度。
请随时让我为问题添加信息,因为我不确定你们需要什么来回答这个问题。
最重要的部分是: 1. 我正在使用 MySQL,这不会改变。 2. 我希望在 php 中找到解决方案(或提示),尽管许多其他语言的提示也有助于我的理解。不过,我主要是一名 PHP 程序员,因此非常感谢使用该语言的回答。
编辑:我想说明几点。 因为传感器记录的时间数据可能不准确,所以我依赖于 SQL 插入时间。这样,时间仅由一台设备控制,即插入数据的 Controller 。
例如,如果我在 24 小时内选择 30 个时间戳/值对,我想将这些“组合”为 24 个时间戳/值对,使用平均值来组合溢出的数据。 我不太好解释,但我希望这能让它更清楚。
此外,我会喜欢一种干净的 SQL 方式来执行此操作,但也会喜欢一种 PHP 方式循环遍历 30 行以生成 24 整小时的数据行。
我的目标是每小时一行,具有准确的时间戳和温度值。主要是因为大多数图形库都需要这种输入。尤其是当我在一张图中有多个系列时。
在某些时候,我可能会发现以 15 分钟的精度显示过去六个小时的图表很有用。
线索是我不想更改原始数据,只是想办法从中提取/计算线性结果。
最佳答案
我会如何处理这个问题;
取日起始值; 01/01/2016 00:00:00
并在 MySQL 中执行“between”“sql”,每小时进行一次。所以第一个“sql”就像;
'从日期介于 01/01/2016 00:00:00 和 01/01/2016 00:59:99 之间的表中选择 avg(temp_value)' 并按小时进行。
sql 不正确,整个 24 小时周期都可以通过编程方式写出,但我认为这将是您前进的起点。
关于php - 将mysql不规则时间序列数据转换为正则序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38057029/