2013-04-15 118 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。不,這會大大簡化問題。看到最後的答案。 –

相關問題