我们有一个庞大的交易表,需要尝试匹配同一个人可能已进行交易的行。挑战在于没有将它们链接在一起的唯一键。
每行中有一系列项目,如果进行比较,我们可以将它们组合在一起。
例如,表格看起来像这样:
=====================
| 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 :(得分: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;