我有一堆用户帐户,我需要根据DOB邮政编码等创建关联。
我有以下查询:
SELECT DISTINCT CONCAT_WS(' , ' ,a.user_id , GROUP_CONCAT( b.user_id SEPARATOR ' , ' ) )
FROM tbl_users_details a,
tbl_users_details b
WHERE a.user_id != b.user_id
AND a.date_of_birth = b.date_of_birth
AND a.postcode = b.postcode
AND LEVENSHTEIN_RATIO( a.last_name , b.last_name ) > 60
GROUP BY a.user_id
证明我的要求......
如果账户1 5 9和12符合标准(即这些人是同一人)
我将以格式
获得4个结果1 , 5 , 9 , 12
5 , 1 , 9 , 12
9 , 1 , 5 , 12
12 , 1 , 5 , 9
我真的很喜欢1,5,9,12
任何指针都会很棒。
谢谢别人。答案 0 :(得分:2)
你能否更清楚你的要求?
无论如何尝试使用像
这样的子查询Select CONCAT (user.i,',)
from
(Select Distinct ...... --- ur old code ---- )
谢谢, 尚穆根
答案 1 :(得分:1)
一般来说,我会做这样的事情:
SELECT GROUP_CONCAT( user_id )
FROM tbl_users_details
GROUP BY date_of_birth, postcode, last_name
但Levenshtein距离检查会导致这个问题,因为实际上并不能保证LEVENSHTEIN_RATIO(x, y) > n
和LEVENSHTEIN_RATIO(y, z) > n
暗示LEVENSHTEIN_RATIO(x, z) > n
。 (例如,如果您的一个用户被命名为“Anderson”,另一个“Addison”和第三个“Atkinson”会怎样?)您可能想要考虑使用其他一些实际将名称映射到不同组的其他相似性估算方法,例如{ {3}}或soundex:
SELECT GROUP_CONCAT( user_id )
FROM tbl_users_details
GROUP BY date_of_birth, postcode, SOUNDEX(last_name)
答案 2 :(得分:0)
您可以在GROUP_CONCAT函数 -
中包含ORDER BY子句... GROUP_CONCAT(b.user_id SEPARATOR ' , ' ORDER BY b.user_id)
答案 3 :(得分:0)
估计我明白了......
SELECT GROUP_CONCAT(ida ORDER BY ida ASC SEPARATOR ' , ') ids
FROM
(SELECT LEAST(a.user_id, b.user_id ) idbase,a.user_id ida, b.user_id idb
FROM apollo.tbl_users_details a,
apollo.tbl_users_details b
WHERE a.user_id != b.user_id
AND a.date_of_birth = b.date_of_birth
AND a.postcode = b.postcode
AND LEVENSHTEIN_RATIO( a.last_name , b.last_name ) > 60
GROUP BY a.user_id) as sub
GROUP BY idbase;
在完整数据集上运行以进行测试..