String 按单个表上字符串的相似性分组

String 按单个表上字符串的相似性分组,string,oracle,grouping,matching,String,Oracle,Grouping,Matching,我需要您的帮助,为下面的要求编写一个Oracle SQL查询 资料来源如下: CLAIM_NUMBER ADDRESS_1 ADDRESS_2 1001 220 CHIRAG ST OHIO 1003 220 ST CHIRAG OHIO 1004 19874 CURLEY AVE ORLANDO 1005 1

我需要您的帮助,为下面的要求编写一个Oracle SQL查询

资料来源如下:

CLAIM_NUMBER       ADDRESS_1            ADDRESS_2
1001               220 CHIRAG ST         OHIO
1003               220  ST CHIRAG        OHIO
1004               19874 CURLEY AVE      ORLANDO
1005               10874  CURLEY AVE     ORLAND
1002               220 CHIRAG ST         OHIO
1006                579 MLK Dr           NASHVILLE
要求:如果地址| 1 | |地址| 2>90%与表中的另一条记录匹配,则生成组id(随机唯一id)

索赔编号地址1地址2组id
俄亥俄州CHIRAG街1001 220 134
俄亥俄州希拉格街220号1003 134
1004 19874奥兰多柯利大街2985号
奥尔良柯利大街1005 10874号和2985号
俄亥俄州希拉格街220号1002 134
1006 579 MLK纳什维尔博士3098
以ACCT\U GRP为例
(
选择NVL(上部(修剪(账户地址)和“NA”)| NVL(上部(修剪(账户地址)和“NA”)CONCAT,
当
UTL_MATCH.JARO_WINKLER(
NVL(上部(TRIM(账户地址)街1号),'NA'| NVL(上部(TRIM(账户地址)街2号),'NA')
滞后(
NVL(上部(TRIM(账户地址)街1号),'NA'| NVL(上部(TRIM(账户地址)街2号),'NA')
)结束
(由
NVL(上部(TRIM(账户地址)街1号),'NA'| NVL(上部(TRIM(账户地址)街2号),'NA')
)
) *10090 
然后grp.concat else null end=grp.concat
按NVL(上部(TRIM(账户地址)和“NA”)排序;NVL(上部(TRIM(账户地址)和“NA”);

这是一个常见的要求,不幸的是,这是不合逻辑的——因此,它当然无法实现。问题是:假设第1行和第2行的相似性超过90%(无论定义如何)。还假设第2行和第3行的相似性超过90%。这两个假设并不意味着第1行和第3行的相似性超过90%。但您必须将第1行和第2行以及第2行和第3行组合在一起,因此第1行、第2行和第3行必须都在同一组中(即使第1行和第3行“不够相似”)

现在假设第5行和第6行不够相似。稍后我们添加第7行,它与第5行的相似性超过90%,与第6行的相似性也超过90%。现在怎么办?现在必须将第5行和第6行组合在一起

虚构的例子:

row 1  ABCDEFGHIJ
row 2  ABCDEFGHIX
row 3  ABCDEFGHYX
所有三个字符串都有十个字母长。第1行和第2行有9个相同的字符(在相同的位置),因此通过一个度量,它们是“90%相似的”。第2行和第3行相同;但第1行和第3行只有80%相似

一句话:整个概念都有致命的缺陷——没有对问题陈述进行澄清,这将使其有意义

这个讨论背后的数学(理论、学术)概念是“等价关系”。如果一个关系是自反的(每个元素都与自身相关)、对称的(如果A和B在关系中,那么B和A也是如此)和传递的,那么它就是等价关系(如果A和B处于该关系中,B和C也处于该关系中,则A和C处于该关系中)。您使用的概念是一种自反对称的关系,但它不是传递的,因此它不是一种等价关系。另一方面,删除“things”“分组”在逻辑上与定义一个等价关系是一样的。你不能基于一个不可传递的关系创建“分组”

row 1  ABCDEFGHIJ
row 2  ABCDEFGHIX
row 3  ABCDEFGHYX