SQL Server 2014查找列之间的关系

时间:2017-06-19 22:21:50

标签: sql tsql group-by relationship sql-server-2014

我有数百行可能是相关的,它看起来不像普通的T-SQL GROUP BY会帮助我。这是场景:

表格中的每一行都包含用户的IP地址,电子邮件地址和其他联系信息。用户可以输入许多不同的行,但我只关心这个人最完整的联系信息,我对他们联系我的次数不感兴趣。

以下是一个示例表:

enter image description here

当我在电子邮件上分组时,我剩下两行。根据我动态选择的IP,我可能没有匹配的IP然后按IP分组。

反过来也是同样的问题。按IP分组将呈现剩余的两行,如果我按电子邮件分组,我不得不担心保持正确的IP地址匹配以将其归结为一条记录。

目标是获得一条记录(毕竟这是一个人)。我们可以通过电子邮件或IP地址告诉我(我不想使用名称)。我可以为任何/所有字段选择任何非空值(min或max作为GROUP BY期间的聚合)。

有人能指出我正确的方向吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定你是如何陷入这种困境的,但这是我的建议。使用您的电子邮件地址作为主键。大多数人不太可能拥有多个他们尝试用作用户ID的电子邮件帐户。请注意您使用电子邮件订阅了多少个网站。此外,不同的人可以使用相同的IP(来自同一家庭的例子)。

考虑到这一点,请使用此查询:

SELECT EMAIL, MIN(FirstName) AS FirstName, Min(LastName) AS LastName, 
    Min(IPAddress) AS IPAddress
FROM MyTable
GROUP BY EMAIL
ORDER BY EMAIL

你最终会在Roberts和Bobs之间丢失一些数据,但是如果你真的不在乎Robert喜欢叫鲍勃,而只是在满月和周二,那么上面的工作就会起作用。 / p>

此外,如果您尝试使用此地址簿,IPAddress可能对您没有多大用处。大多数人没有专用的IP,可能会漫游到不同的WiFi热点,所以我希望随着时间的推移,联系人列表中的IP地址会经常变化。