KDB-在同一列中查找重复项或类似条目

时间:2018-11-30 00:35:10

标签: kdb

我正在尝试消除联系人列表中客户的重复条目。假设我的表有三列(名字,姓氏,客户ID)。

有人可以帮助我创建一个查询,该查询标识具有相同或非常相似的名字和姓氏的不同客户ID吗?由于销售人员搜索名称而不是由于拼写错误而找不到它,因此最终出现多个条目。然后,他们使用略有不同的名称拼写为客户创建一个新条目。

谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是管理名称到常见(错误)拼写的映射,然后将所有各种拼写映射回预期的名称。然后将它们分组。

t:([] fn:100?(`John;`Mike;`Bob;`john;`Johnn;`Mick;`Bobby);ln:100?(`Doe;`Smith;`doe;`Do;`smith);id:til 100)

mapFN:exec similar!name from ungroup flip `name`similar!flip (
    (`Bob; (`Bob;`bob;`Bobby;`bobby));
    (`John; (`John;`Johnn;`john));
    (`Mike; (`Mike;`mike;`Mick;`Michael))
    );

mapLN:exec similar!name from ungroup flip `name`similar!flip (
    (`Doe; (`Doe;`doe;`Do));
    (`Smith; (`Smith;`smith;`Smyth))
    );

没有映射:

q)`fn`ln xgroup t
fn    ln   | id
-----------| ----------------
Mick  Do   | 0 25 26 50 68 71
Bobby Smith| 1 22 23 83
John  Smith| 2 8 48 51 69 85
Mike  Doe  | 3 44
john  doe  | ,4
Mick  Doe  | 5 47 95
John  Doe  | 6 46 49 63
john  Smith| 7 66 74
Johnn doe  | 9 13 79 94
Mick  doe  | 10 20 55 67
Bobby smith| 11 17 18 53
john  Doe  | 12 21 56
...

具有映射:

q)`fn`ln xgroup update mapFN[fn],mapLN[ln] from t
fn   ln   | id
----------| -----------------------------------------------------------------
Mike Doe  | 0 3 5 10 20 25 26 39 44 47 50 52 55 67 68 70 71 78 95 97
Bob  Smith| 1 11 17 18 22 23 30 38 45 53 77 82 83
John Smith| 2 7 8 16 19 33 37 40 43 48 51 64 66 69 73 74 80 85 87
John Doe  | 4 6 9 12 13 21 31 32 41 42 46 49 56 57 62 63 65 72 79 81 86 89 91
Bob  Doe  | 14 24 27 28 35 54 58 59 61 75 76 84
Mike Smith| 15 29 34 36 60 88 90 93 96 98

您还可以使用正则表达式模式匹配来做一些更复杂的事情。

映射必须非常精确,否则可能会导致错误的分组

相关问题