MySQL数据库识别变化事件
我需要搞清楚查明大型数据集的“事件”字段的变化的最佳方法和最有效的方式一些援助/建议。
我有一些记录温度数据的硬件。温度数据根据一些设置进行评估并进行分类(1,2或3)。我想要做的是确定何时发生“事件”/状态更改以及更改时间,获取此事件的时间戳。
我怀疑最好和最明显的解决方案是模拟窗口LAG功能。令人费解的是,这个事件代码的3选项意味着不同的东西,所以我正在考虑使用事件和滞后(事件)的总和,结果将识别从状态1到状态3的变化。此外,由于数据集很长(数百万行),事件将改变状态将经常改变,我也只需要状态的最后改变(该期间的开始和期间的结束)。也有很多仪表报告,并且在评估状态变化时每个仪表必须保持分开。
如果任何人有任何建议或有类似的查询,以及如何处理,感兴趣。如果能够使查询快速且高效并具有预期的结果,那么即使结构发生变化,也可以接受任何建议。
如数据集
| date_time | event_code | meter_id |
|---------------------|------------|----------|
| 2017-04-15 06:20:10 | 2 |1 |
| 2017-04-15 06:21:52 | 2 |2 |
| 2017-04-15 06:28:13 | 1 |2 |
| 2017-04-15 06:32:01 | 2 |1 |
| 2017-04-15 06:32:49 | 2 |2 |
| 2017-04-15 06:37:28 | 3 |1 |
| 2017-04-15 06:39:21 | 3 |1 |
| 2017-04-15 06:44:01 | 3 |1 |
| 2017-04-15 06:45:28 | 2 |1 |
| 2017-04-15 06:49:18 | 2 |2 |
所需的结果 - 假设EVENT_CODE 2是正常状态
| date_time | event_code | meter_id |
|---------------------|------------|----------|
| 2017-04-15 06:28:13 | 1 |2 | start and end event 1 meter 2
| 2017-04-15 06:32:49 | 2 |2 | start event 2 meter 2
| 2017-04-15 06:37:28 | 3 |1 | start event 3 meter 1
| 2017-04-15 06:44:01 | 3 |1 | end event 3 meter 1
| 2017-04-15 06:45:28 | 2 |1 | start and end event 2 meter 1
| 2017-04-15 06:49:18 | 2 |2 | end event 2 meter 2
编辑所需的结果
| event_code | meter_id | last_evet_start | last_evet_end |
|------------|----------|---------------------|---------------------|
| 1 | 2 | 2017-04-15 06:45:28 | 2017-04-15 06:45:28 |
| 1 | 3 | 2017-04-15 06:37:28 | 2017-04-15 06:44:01 |
| 2 | 1 | 2017-04-15 06:28:13 | 2017-04-15 06:28:13 |
| 2 | 2 | 2017-04-15 06:32:49 | 2017-04-15 06:49:18 |
期望的结果是什么? – McNets
编辑过的问题与期望的输出/结果 – Michael
event_code = 2发生了什么? – McNets