2017-06-19 25 views
0

我有數百行可能是相關的,它似乎不像一個正常的T-SQL GROUP BY會幫助我。這裏是場景:SQL Server 2014查找列之間的關係

表中的每一行都包含用戶的IP地址,電子郵件地址和其他聯繫信息。用戶可以輸入許多不同的行,但我只關心該人最完整的聯繫信息,我對他們與我聯繫的次數不感興趣。

下面是一個示例表:

enter image description here

當我組電子郵件,我得到兩個剩餘行。根據我動態選擇的IP,我可能沒有匹配的IP,然後按IP分組。

反過來也是一樣的問題。按IP分組將會呈現兩個剩餘的行,那麼如果我通過電子郵件分組,我不得不擔心保持正確的IP地址匹配才能將其記錄到一條記錄。

目標是獲得一個記錄(畢竟這是一個人)。我們可以通過電子郵件或IP地址(我不想使用名稱)來判斷。我很好,爲任何/所有字段選擇任何非空值(在GROUP BY期間,最小或最大值作爲聚合)。

任何人都可以指向正確的方向嗎?先謝謝你。

回答

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 

你會最終失去了羅伯茨和鮑勃之間的一些數據,但如果你真的不關心如何羅伯特喜歡被稱爲鮑勃,但只限於滿月和星期二,那麼上述內容將起作用。

此外,如果您嘗試將地址簿製作出來,IPAddress可能對您沒有多大用處。大多數人沒有專用IP,並且可能漫遊到不同的WiFi熱點,所以我期望經常更改一段時間內的聯繫人列表中的IP地址。

+0

Hi @SandPiper,感謝您的快速響應。我每天都會收到大量的線索,並且我試圖在將每條線索插入數據庫之前將線索放到每個線索一個聯繫人。我不一定要存儲IP地址,但它是一條可以用來表示關係的信息。我明白,人們可以擁有相同的知識產權,並且願意犧牲完整的準確性,將記錄降至一個。我甚至想過把IP與第一個名字的第一個字母和姓氏的第一個字母連接起來。 –

+0

您提供的查詢將記錄向下帶到兩條記錄。是否有辦法讓它動態地變成一個?這意味着,當我對Email進行分組時,我必須爲IP地址選擇一個標量值,如果它不是與第二條記錄共享一個值的IP地址,那麼我將無法使用分組依據IP。 –

+0

總有辦法做到這一點,但更好的問題是,你應該怎麼做? Bobby Doe和Robert Doe真的是同一個人嗎?如果是父親和兒子呢?還是兩個兄弟?請花一點時間閱讀以下內容:https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem。在我看來,最好的解決方案是在數據進入系統之前更有效地屏蔽數據。對於已經在那裏的東西,找到唯一的電子郵件(我會賭那裏可能沒有太多重複),並且你有你的聯繫人列表。 – SandPiper