gpt4 book ai didi

sql-server - 在一个或多个字段上分组时查找列表中的重复对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:47 25 4
gpt4 key购买 nike

我需要在列表中找到与列表中至少一个其他对象相交的所有对象。这是由一些设置决定的:

  1. “重复检查”字段的列表(例如,一个人可以在 FirstNameLastNameDOB 上交叉)。
  2. 两个人相交的最少字段数必须相等(例如,如果数字为 2,如果 A 和 B 具有相同的 FirstName,则他们将相交LastName,相同的 FirstNameDOB,或相同的 LastNameDOB)。<

确定这一点的最有效方法是什么?目前,使用带有 GROUP BY 语句的 SQL 和临时表是最高效的,但还不够好。我尝试在 C#/LINQ 中使用字典和硬编码各种属性检查,但情况更糟。我一直在研究不相交的集合和 Levenshtein 距离,但这对于一个大列表来说似乎同样低效。这只是一个 NP 完全问题吗?

最佳答案

您必须使用 UNPIVOT 更改表格为这种格式

如果您没有 user_id,您可以使用 row_number() 创建一个

 USER_ID, FIELDNAME  , VALUE
1 , "LastName" , "Smith"
1 , "FirstName", "Jhon"
1 , "DOB" , "15/09/48"

然后执行这个连接

SELECT T1.user_id, T2.user_id, count(T2.FieldName)
FROM Table1 T1
LEFT JOIN Table1 T2
on T1.UserID > T2.UserID
and T1.FIELDNAME = T2.FIELDNAME
and T1.Value = T2.Value
GROUP BY T1.user_id, T2.user_id
HAVING count(T2.FieldName) >= 2

关于sql-server - 在一个或多个字段上分组时查找列表中的重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32878199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com