【发布时间】:2015-03-22 20:38:17
【问题描述】:
这似乎是一个如此简单的问题,但我找不到好的解决方案。我正在尝试从格式稍有错误的表格中选择信息。基本上,无论sequence=0,person_id 实际上应该是company_id。这个company_id 然后适用于所有具有相同group_id 的行。
有人认为以这种方式格式化而不是简单地使用company_id 列是个好主意,但这使得尝试按公司进行选择变得非常困难。只需添加这个额外的列并修复格式,我的编程就会变得更加容易。
我想变成这样:
+----------+------------+-----------+----------+
| group_id | date | person_id | sequence |
+----------+------------+-----------+----------+
| 1 | 2012-08-31 | 10 | 0 |
| 1 | 2012-08-31 | 11 | 1 |
| 1 | 2012-08-31 | 12 | 2 |
| 2 | 1999-04-16 | 10 | 0 |
| 2 | 1999-04-16 | 21 | 1 |
| 2 | 1999-04-16 | 22 | 2 |
| 2 | 1999-04-16 | 23 | 3 |
| 2 | 1999-04-16 | 24 | 4 |
| 3 | 2001-01-09 | 30 | 0 |
| 3 | 2001-01-09 | 31 | 1 |
| 3 | 2001-01-09 | 11 | 2 |
| 3 | 2001-01-09 | 12 | 3 |
+----------+------------+-----------+----------+
进入这个:
+------------+----------+------------+-----------+----------+
| company_id | group_id | date | person_id | sequence |
+------------+----------+------------+-----------+----------+
| 10 | 1 | 2012-08-31 | 11 | 1 |
| 10 | 1 | 2012-08-31 | 12 | 2 |
| 10 | 2 | 1999-04-16 | 21 | 1 |
| 10 | 2 | 1999-04-16 | 22 | 2 |
| 10 | 2 | 1999-04-16 | 23 | 3 |
| 10 | 2 | 1999-04-16 | 24 | 4 |
| 30 | 3 | 2001-01-09 | 31 | 1 |
| 30 | 3 | 2001-01-09 | 11 | 2 |
| 30 | 3 | 2001-01-09 | 12 | 3 |
+------------+----------+------------+-----------+----------+
我能想到的唯一方法是使用嵌套的 SELECT 语句,考虑到我有大约 100M 行,这非常低效。不过这是一次性修复,所以我不介意让它在一夜之间运行。
【问题讨论】: