非常抱歉,很少在 V2EX 上发帖,我的排版是不够友好,以这个为准把
有一个产品统计表 d1, 每总产品的 total 数量为该类型产品 型号 part1 数量加型号 part2 数量
+-----+-------+-------+-------+
| pid | total | part1 | part2 |
+-----+-------+-------+-------+
| 1 | 10 | 5 | 5 |
| 2 | 13 | 7 | 6 |
+-----+-------+-------+-------+
可以如下句子初始化 d1 表
create table d1 (
pid int primary key,
total int,
part1 int,
part2 int
);
insert into d1 values (1, 10, 5, 5);
insert into d1 values (2, 13, 7, 6);
还有一个产出表 f1,记录每个批次 part1 的量产, bid 字段为批号 , part1 字段 为该批次的产量
比如最近 5 个批次的产量记录如下
+-----+------+-------+
| bid | pid | part1 |
+-----+------+-------+
| 1 | 1 | 3 |
| 2 | 1 | 6 |
| 3 | 1 | 9 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
+-----+------+-------+
可以如下句子初始化 f1 表
create table f1 (
bid int auto_increment primary key,
pid int,
part1 int
);
insert into f1 (pid, part1) values (1, 3);
insert into f1 (pid, part1) values (1, 6);
insert into f1 (pid, part1) values (1, 9);
insert into f1 (pid, part1) values (2, 1);
insert into f1 (pid, part1) values (2, 2);
现在每隔一段时间做一次统计,生成一个账目表 f2, 要求记录产品每个批次的数量变化,
比如某一次统计要统计 f1 中 5 个批次的产量, 期望插入如下记录
+-----+------+------+------+-------+
| tid | bid | pid | qty | total |
+-----+------+------+------+-------+
| 1 | 1 | 1 | 3 | 13 |
| 2 | 2 | 1 | 6 | 19 |
| 3 | 3 | 1 | 9 | 28 |
| 4 | 4 | 2 | 1 | 14 |
| 5 | 5 | 2 | 2 | 16 |
+-----+------+------+------+-------+
可以如下句子初始化 f2 表
create table f2 (
tid int auto_increment primary key,
bid int,
pid int,
qty int,
total int
);
注意以下的插入语句其实是我期望统计生成的数据
insert into f2 (bid, pid, qty, total) values (1,1,3,13);
insert into f2 (bid, pid, qty, total) values (2,1,6,19);
insert into f2 (bid, pid, qty, total) values (3,1,9,28);
insert into f2 (bid, pid, qty, total) values (4,2,1,14);
insert into f2 (bid, pid, qty, total) values (5,2,2,16);
目前每次统计是纯 sql 来调度的,优先考虑不用存储过程,
我本来用 join 来插入的,但发现搞不定 f2.total 那一列
排版有点问题,
```sql
insert into f2 (bid, pid, qty, total) values (1,1,3,13);
insert into f2 (bid, pid, qty, total) values (2,1,6,19);
insert into f2 (bid, pid, qty, total) values (3,1,9,28);
insert into f2 (bid, pid, qty, total) values (4,2,1,14);
insert into f2 (bid, pid, qty, total) values (5,2,2,16);
```
mysql> select * from d1;
+-----+-------+-------+-------+
| pid | total | part1 | part2 |
+-----+-------+-------+-------+
| 1 | 10 | 5 | 5 |
| 2 | 13 | 7 | 6 |
+-----+-------+-------+-------+
2 rows in set (0.00 sec)
mysql> select * from f1;
+-----+------+-------+
| bid | pid | part1 |
+-----+------+-------+
| 1 | 1 | 3 |
| 2 | 1 | 6 |
| 3 | 1 | 9 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
+-----+------+-------+
5 rows in set (0.00 sec)
mysql> select * from f2;
+-----+------+------+------+-------+
| tid | bid | pid | qty | total |
+-----+------+------+------+-------+
| 1 | 1 | 1 | 3 | 13 |
| 2 | 2 | 1 | 6 | 19 |
| 3 | 3 | 1 | 9 | 28 |
| 4 | 4 | 2 | 1 | 14 |
| 5 | 5 | 2 | 2 | 16 |
+-----+------+------+------+-------+
5 rows in set (0.00 sec)