2015-02-05 45 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

相关问题