2013-04-15 117 views
2

我正在更新现有数据库以简化它并扩展其功能。我有一个表,如下所示:MySQL - 结合两条记录,每个记录的不同字段

ID Parent increment  info 1 info 2 
1 103  0   25  1 
2 103  1    4  2 
3 103  2   45  5 
4 103  3   13  7 
5 115  0   17  5 
6 115  1   23  3 
7 116  0   22  2 
8 116  1   1   1 
9 116  2   7   3 
10 117  0   19  4 

我希望新表包含每个“家长”只有一个记录,该记录应与具有该父数记录包含大多数字段,该数据最大'增量'数字,但是对于信息2字段,它应该从记录中获取最小“增量”的数据。

所需的输出如下:

ID Parent increment info 1 info 2 
4 103  3  13   1 
6 115  1  23   5 
9 116  2  7   2 
10 117  0  19   4 

这是记录排序选择合并的可能在MySQL?

我已经看过使用Group by Parent,但是有相当数量的字段可以带过来,所以我不确定这会起作用。我还查看了表格的LEFT OUTER JOIN自身,以最大增量突出显示每个父代中的记录,但是这不允许我从具有相同父代但具有最小增量的记录中选择数据。

不知所措,会真的很感谢别人的帮助。

回答

1
SELECT tt1.ID, tt1.Parent, MaxInc, tt1.info1, tt2.info2 FROM 
(SELECT ID, Parent, MaxInc, info1 FROM test INNER JOIN 
(SELECT Parent AS p, MAX(incr) AS MaxInc FROM test GROUP BY Parent) AS t1 
ON Parent = p AND incr = MaxInc) AS tt1 INNER JOIN 
(SELECT Parent, info2 FROM test INNER JOIN 
(SELECT Parent AS p, MIN(incr) AS MinInc FROM test GROUP BY Parent) AS t2 
ON Parent = p AND incr = MinInc) AS tt2 ON tt1.Parent = tt2.Parent 

我改变增量增量

+0

的最小增量来说太棒了。像梦一样工作。我在这里是一个新手,但会反对这个答案,w770115,否则。 –

+0

我也试图对ms访问mdf文件应用相同的查询,但不断收到连接错误。有什么想法吗? –

+0

在MS Access子查询必须在不同的查询中完成,然后你可以内部连接到这个查询。 在这里: – w770115

2

是的,你可以做到这一点。假设你只有值从1到9的附加字段:

select t.* 
from t join 
    (select left(parent, locate(' ', parent) - 1) as p, 
      MAX(parent) as maxparent, 
      max(len 
     from t 
     group by left(parent, locate(' ', parent)) 
    ) tp 
    on left(t.parent, locate(' ', t.parent) - 1) = tp.p 
where t.parent = tp.maxparent 

如果数字超越9,你需要一些额外的摆弄,如:

select * 
from t join 
    (select left(parent, locate(' ', parent) - 1) as p, 
      max(SUBSTRING(parent, locate(' ', parent) + 1)) as maxval 
     from t 
     group by left(parent, locate(' ', parent)) 
    ) tp 
    on left(t.parent, locate(' ', t.parent) - 1) = tp.p 
where t.parent = concate(tp.p, ' ', maxval) 

修订后的数据结构:

select t.* 
from t join 
    (select parent, MAX(increment) as maxi 
     from t 
     group by parent 
    ) tp 
    on t.parent = tp.parent and t.increment = tp.maxi 
+0

感谢您的惊人快速反应。我会和他一起玩,并报告回来。 –

+0

是定位('',父母)-1)必要的语言?我的桌面布局不是很清楚。我整理了一下。 –

+0

@TimCullen。不,这会大大简化问题。看到最后的答案。 –

相关问题