Mysql 时间间隔识别
我正在设计一个MySQL数据库,它将包含从远程源收集的逐分钟数据 我计划让数据表保存一个datetime字段,因此每行可能有3个月的数据,表示每分钟的值 我如何才能轻松识别数据中的差距?我应该用datetime吗 我将对应用程序本身使用PHP5 谢谢,Mysql 时间间隔识别,mysql,datetime,Mysql,Datetime,我正在设计一个MySQL数据库,它将包含从远程源收集的逐分钟数据 我计划让数据表保存一个datetime字段,因此每行可能有3个月的数据,表示每分钟的值 我如何才能轻松识别数据中的差距?我应该用datetime吗 我将对应用程序本身使用PHP5 谢谢, Jim我会给每一行一个唯一的顺序引用(1,2,3…),然后在表上进行自连接 ...from mytable t1 join mytable t2 where (t1.ref+1)=t2.ref 根据您存储日期的方式,您可以(以某种方式)减去日期
Jim我会给每一行一个唯一的顺序引用(1,2,3…),然后在表上进行自连接
...from mytable t1 join mytable t2 where (t1.ref+1)=t2.ref
根据您存储日期的方式,您可以(以某种方式)减去日期,并确定是否存在间隔。将整个过程包装在一个查询中,该查询提取存在间隙的行
你可能想考虑将日期存储在一个特定的开始日期的秒。
< P>识别差距是一个有趣的问题。最好的方法取决于差距的大小,但这里有另一种解决方法,如果差距与您拥有的记录数量相比相当大,那么这种方法可能会更好 在查询中使用MySQL聚合函数来计算一组存储桶的记录数。桶的大小必须与您感兴趣的间隙类型相似。假设您对大约一天左右的间隔感兴趣,我会这样做:SELECT TO_DAYS(my_timestamp), COUNT(*)
FROM my_table
GROUP BY TO_DAYS(my_timestamp)
这将返回天数和时间戳计数之间的关联。我会用Perl或Java(甚至R,见下文)这样的语言来处理数据
我将使用的技术是测试观察到的频率(计数)和预期频率之间的差异,即记录总数除以日期范围。每天的预期频率如下:
SELECT (SELECT COUNT(*) FROM my_table) /
((SELECT TO_DAYS(MAX(my_timestamp)) FROM my_table) -
(SELECT TO_DAYS(MIN(my_timestamp)) FROM my_table) + 1)
现在,对于每个桶(请记住,在第一个结果中,完全缺失的天数将不会返回,不会作为零计数返回——您需要将它们视为零,您可以使用统计检验,卡方检验,来估计这是偶然的概率(有关详细信息,请参阅:)。计算基本上是((预期-观察)^2/预期)。这是对偏差可能性的估计
如果你需要计算样本中哪一个桶是低的,那么在这个计算值上设置一个合理的阈值,并在值超过阈值的情况下寻找桶。需要一个小的实验来设计一个适当的值,但是这是一个确定间隙的好方法。< /P>如果你正在构建一个日志应用程序,那么考虑U。sing TIMESTAMP data type在什么情况下会有间隙?缺少到远程源的连接?是的,到远程服务的连接不可用。(或者我的cron检查数据源由于某种原因没有运行)为什么R?嗯,它有一些非常好的用于统计计算的内置功能,如卡方检验