2015-02-05 62 views
2

我們有交易的一大桌,需要嘗試和匹配,其中交易可能已經由同一人作出行。挑戰在於沒有獨特的關鍵將它們聯繫在一起。匹配多個記錄在一個表中

有一系列的每一行中的項目,如果相比應該使我們能夠將它們分組在一起。

因此,例如表看起來是這樣的:

 ===================== 
    | C1 | C2 | C3 | C4 | 
    --------------------- 
    1 | A | B | C | D | 
    --------------------- 
    2 | B | C | D | A | 
    --------------------- 
    3 | A | B | C | D | 
    --------------------- 
    4 | C | D | A | B | 
    --------------------- 
    5 | A | B | C | D | 
    ===================== 

所以我們希望能夠以組是「可能」的基礎上與其他相匹配的幾種不同列中的同一人所作的交易數據。這些其他列都不會是完全獨一無二的,所以我們需要在儘可能多的列上匹配記錄以增加它們與同一個人相關聯的可能性。

集團很可能是錯誤的用語,因爲我們希望像一個結果:

 ===================== 
    | C1 | C2 | C3 | C4 | 
    --------------------- 
    1 | A | B | C | D | 
    --------------------- 
    2 | A | B | C | D | 
    --------------------- 
    3 | A | B | C | D | 
    --------------------- 
    4 | B | C | D | A | 
    --------------------- 
    5 | C | D | A | B | 
    ===================== 

所以在這種情況下,它已顯示與行1,2和5在一起的結果,因爲他們都有着相同的信息在我們正在匹配的列。

我們試過類似:

SELECT * 
FROM group_test gt1, group_test gt2 
WHERE gt1.a = gt2.a 
AND gt1.b = gt2.b 
AND gt1.id != gt2.id; 

,但我們剛剛結束了重複的行。也許這甚至不可能只使用SQL - 在這裏完全無知,所以任何幫助將不勝感激!

+0

也許我失去了一些基本的東西,但它好像你只是想訂購行? – 2015-02-05 13:46:16

+0

你確定'1,2行和5行共享相同的信息嗎? – RubahMalam 2015-02-05 13:46:21

+0

你在找什麼結果?似乎一羣人和數會得到你想要的,或者只是一種... – xQbert 2015-02-05 13:46:26

回答

0

也許只是一個簡單的排序...

Select C1, C2, C3, C4 
from group_test 
order by C1, C2, C3, C4 

或者是一組由數到告訴你有多少行相同的數據匹配...

Select count(*), C1, C2, C3, C4 
from group_test 
GROUP BY by C1, C2, C3, C4 

或者你只需要完成您的加入刪除重複...

SELECT * 
FROM group_test gt1 
INNER JOIN group_test gt2 
    on gt1.a = gt2.a 
AND gt1.b = gt2.b 
AND gt1.c = gt2.c 
AND gt1.d = gt2.d 
WHERE gt1.id != gt2.id; 
+0

完美的謝謝。完全錯過了明顯的解決方案! – 1zebedee23 2015-02-05 14:01:00

相關問題