0
我正在开发一个脚本,该脚本将从我们的SCM中获取有关源代码活动的信息,例如针对给定产品随时间变化的源代码活动数量,例如更改的行数。所有给定的产品在同一天内发生的变化组合成一个MySQL表中的单个记录,这样的事情:填写日期差距和最近值
+------------+-------+------+
| date | prod | line |
+------------+-------+------+
| 2011-11-25 | prod2 | 471 |
| 2011-11-28 | prod2 | 389 |
+------------+-------+------+
我然后使用内累积的结果加入和求和复制表:
+------------+-------+------+
| date | prod | line |
+------------+-------+------+
| 2011-11-25 | prod2 | 471 |
| 2011-11-28 | prod2 | 860 |
+------------+-------+------+
现在,我想创建一个表,每个产品每天有一个记录。我已经能够通过加入日历表来实现这一点。然而,在创建新的记录,线场应与该产品的最新的累积值,而不是一些硬编码的默认像NULL或0填充:
+------------+-------+------+
| date | prod | line |
+------------+-------+------+
| 2011-11-25 | prod2 | 471 |
| 2011-11-26 | prod2 | 471 |
| 2011-11-27 | prod2 | 471 |
| 2011-11-28 | prod2 | 860 |
+------------+-------+------+
我已经解决了这个问题2个不满意的方面至今:
- 填写日期的差距第一,然后计算累积和
- 遍历决赛桌的每一个元素,大大节省了最新的非空元素在@u ser变量。
一旦我的表变得足够大,第一个解决方案变得非常低效。第二种解决方案可以完成工作,但我一直在寻找更优雅的解决方案。这里是生成NULL的表的代码:
INSERT INTO final SELECT d.date,f.prod,p.line
FROM calendar AS d
CROSS JOIN
(SELECT DISTINCT prod FROM cumulative) AS f
LEFT JOIN cumulative AS p USING (date,prod) ;
任何想法?我正在使用MySQL。
为什么要创建不是一个而是两个冗余表? – 2012-01-12 20:35:25