繁体   English   中英

MySQL:忽略行之间的差异大于x的结果

[英]MySQL: ignore results where difference is more than x between rows

我有一个简单的PHP / HTML页面,该页面运行MySQL查询以提取温度数据并显示在图形上。 偶尔会从我的传感器(DHT11温度/ RH传感器,由Arduino读取)中读取一些不良数据,其中会有一个过高或过低的峰值,因此我知道这不是一个好的数据点。 我发现这很容易解决,如果它“超出”范围,因为在没有理智的温度下,我只是使用BETWEEN语句过滤掉所有可能不正确的记录。

我确实意识到最终应该将其固定在源头上,因此这些不良读数永远不会放在第一位,但是作为调试工具,我确实希望将这些错误记录在我的数据库中,因此我可以追踪时间点当我的硬件出现错误时。

但是,这对实际落在理智温度范围内的偶然峰值没有帮助。 例如,如果室外温度为65 F,传感器偶尔会抛出一个奇怪的读数,而我却得到107 F的读数,它会完全弄乱我的图表,比例尺等。我无法使用BETWEEN(我知道)进行过滤,因为107 F实际上是我所在地区的实际夏季温度。

有没有一种方法可以根据相邻行来过滤掉值? 如果为了简单起见,我要读取五行,它们的结果是:77,77,76,102,77 ...我可以说“任何大于连续行之间的(x)差异的东西,我可以做些类似的事情吗? ,请忽略它,因为它是错误的数据”?

[/冗长]

没有您的模式很难回答,所以我做了一个SQLFiddle来重现您的问题。

您需要平均时间范围内的温度,然后将此值与当前行进行比较。 如果相差太大,则我们不选择此行。 在我的小提琴中,这是通过以下方式完成的:

abs(temp - (SELECT AVG(temp) FROM temperature AS t 
            WHERE 
              t.timeRead BETWEEN 
                           DATE_ADD(temperature.timeRead, interval-3 HOUR) 
                         AND
                           DATE_ADD(temperature.timeRead, interval+3 HOUR))) < 8

此条件计算的是最近3小时和接下来3小时的平均温度。 如果相差大于8度,则跳过此行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM