Java MySQL重复事件

Java MySQL重复事件,java,mysql,sql,database-design,pattern-matching,Java,Mysql,Sql,Database Design,Pattern Matching,我正在构建一个java应用程序,它将从MySQL数据库中查找重复事件 我的桌子看起来像这样: | **EventID** | **Device** | **Level** | **TimeStamp** | (id) 001 40% 1/18/2016 4:50:20 事件类似于:设备001在1/18/2016 4:50:20时变为40% 我如何查找以下事件: 设备A在每个工作日的7:30:00左右变为36%左右 或 设备B在每周三晚上15

我正在构建一个java应用程序,它将从MySQL数据库中查找重复事件

我的桌子看起来像这样:

| **EventID** | **Device** | **Level** | **TimeStamp** |
     (id)           001         40%     1/18/2016 4:50:20
事件类似于:设备0011/18/2016 4:50:20时变为40%

我如何查找以下事件:

设备A在每个工作日的7:30:00左右变为36%左右

设备B在每周三晚上15:30:00左右转到90%左右

请注意,级别和时间并不是事件的最终结果(这就是为什么它存在的原因)。MySQL是否有方法查找事件并返回时间间隔和级别间隔?因为我知道如果我运行以下操作,性能会很差:

For (all devices) {

 For (time 00:00:00 to time 23:59:59) {

      For (level 0% to 100%) {

            //SELECT based on level intervals and time intervals

      }
 }
}

上述方法也会有偏差,因为此处预设了时间和电平间隔。举个例子,如果事件总是发生在7:40左右,而我在7:20和7:40之间做间隔,我不会发现那么多的事件。级别也一样。

MySQL没有直接的工具来实现这一点

首先,确定哪种类型的精度对您的应用程序有意义。例如,“大约40%”是否意味着39.9到40.1?还是35到45?还是别的什么?《时代》也是如此——20分钟的窗口足够精确吗?或者应该是1分钟还是1小时

然后折叠。也就是说,“每日”忽略一天,并在一天中的某个时间段求和。对于“工作日”,忽略周末

和双倍总和。。。下限(值/10)为每个常规的10个单位范围提供一个不同的整数。FLOOR((值+5)/10)为您提供10个单位间隔的整数,但移动了5个单位。迷路的让我从另一个角度来探讨这个问题

如果有一组读数17,18,18,19,19,19,20,21,22,23。按一楼分组将给出

  • 整数=1,计数=6(17..19),中点=15;及
  • 整数=2,计数=4(20..23),中点=25
第二层将把所有这些放在一起,然后找到

  • 计数=10,中点=20
最大计数为10,对应于中点20。那么,你不认为有一个星系团“大约20个”,而不是两个星系团,一个大约15个,另一个大约25个吗

无论如何,这就是我发现集群的方式。我只会选择最上面的几个计数,扔掉其余的,然后合并任何重叠或相邻的簇

上面的“单位”可以是百分比、一天中的时间、一周中的天数,任何有意义的单位

要拍摄多少个“集群”?嗯,我对这本书很着迷。据预测,80%的项目将聚集在20%的单元周围。鉴于此,20%后停止扫描中点

如果第一次“精度”错误,请更改它并重新开始。

您需要确定“周围”对客户意味着什么。读一下关于你和我之间的故事。PS除了“周围”,你还必须决定“每一个”是什么意思——对于日历上有事件或日期的日期?表中的所有日期还是日期范围内的所有日期?