php – 查找重叠值的时间总和
几天来,我一直在努力解决这个问题.我有一台可能有错误的机器.在数据库中,我有错误出现时的开始和结束时间(在unix时间),以及错误类型(数字从5到12).我遇到的问题是多个错误可能同时发生(和重叠). 我的表看起来像这样:
我需要找到这台机器的总错误持续时间.我无法总结上表中的所有差异,因为在同一时间间隔内可能出现两个或更多错误.记录按升序排序. 我的猜测是将每个记录(开始和结束时间)与之前进行比较,然后找出以秒为单位的差异.但是,此表可能会随着时间的推移而增长,搜索它是一个问题. 有没有一种聪明的方法在PHP或MySQL中找到机器不工作的总时间,可能在几分钟内? 最佳答案 这是一种总结间隔的一般方法,考虑到潜在的重叠,假设间隔按其较低的值排序.2间隔案例 当添加两个区间[a,b]和[c,d],因此(d-c)(b-a)时,将它们的重叠计算两次. >如果重叠不为零,则其值为min(b,d) – max(a,c).由于您在间隔开始时对项目进行了排序,因此您知道max(a,c)== c. 推广到更多的间隔 要概括为多于两个的间隔,只需考虑当您将新间隔[c,d]添加到任意数量的先前间隔时,添加(dc)并且计算两次的重叠在[c,d]和之间所有先前间隔的联合. 由于您对其起始值进行了间隔排序,因此您只需要考虑此并集的最后一个连续间隔,从而为您提供最后一个连续的停机时间段. 如果[a,b]是您之前的最后一个连续间隔,并且您刚刚添加了[c,d]: >如果[a,d]重叠,则最后一个连续间隔变为[a,max(b,d)],因为这是[a,d]的并集 因为< c由于排序的间隔,间隔重叠iff c < b 在代码中 这可能比在mysql中更容易在php中实现.在伪代码中,假设每行返回(开始,结束)错误间隔,[a,b]是您最后一次知道的连续间隔:
您可以在此处看到此代码成功运行:https://3v4l.org/Q2phs (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |