【发布时间】:2010-03-09 01:12:07
【问题描述】:
我们正在编写一个 MySQL 数据仓库应用程序,该应用程序存储与时间和生产数量数据(在下面的第一个表)在其上应用聚合(SUM、COUNT、AVG)函数。我们现在希望分解时间数据以进行另一种类型的分析。
我们目前的数据表设计:
+---------+---------+------------+---------------------+---------------------+--------+------+
| User ID | Work ID | Machine ID | Event Start Time | Event End Time | Output | Time |
+---------+---------+------------+---------------------+---------------------+--------+------+
| 080025 | ABC123 | M01 | 2008-01-24 16:19:15 | 2008-01-24 16:34:45 | 2120 | 930 |
+---------+---------+------------+---------------------+---------------------+--------+------+
我们想做的重新处理分解是基于分钟粒度而不是当前生产事件(“事件开始时间”和“事件结束时间”)粒度来转换表格内容。现有表行的重新处理结果如下所示:
+---------+---------+------------+---------------------+--------+
| User ID | Work ID | Machine ID | Production Minute | Output |
+---------+---------+------------+---------------------+--------+
| 080025 | ABC123 | M01 | 2010-01-24 16:19 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:20 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:21 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:22 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:23 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:24 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:25 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:26 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:27 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:28 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:29 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:30 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:31 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:22 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:33 | 133 |
| 080025 | ABC123 | M01 | 2010-01-24 16:34 | 133 |
+---------+---------+------------+---------------------+--------+
因此,重新处理将采用以生产事件粒度创建的现有数据行,并将粒度修改为分钟,同时消除冗余(事件结束时间、时间)列。它假定生产速率恒定,并将输出除以分钟差加一来填充新表的输出列。
我知道这可以在代码中完成...但它可以完全在 MySQL 插入语句中完成(或者完全在 MySQL 中)吗?我正在考虑一个 INSERT ... INTO 构造,但一直卡住。另一个复杂性是操作中要包含数百台机器,因此一天中的每一分钟都会有多行(每台机器一个)。
任何想法将不胜感激。谢谢。
【问题讨论】: