我有一个UserIds列表(这是一个uniqueidentifier),名称,电子邮件地址和关系。
像
这样的东西SELECT UserId, Name, Email, Relationship FROM Users
示例数据如下所示:
F87B7702-F0EE-11D3-B288-0000B4A488D3 Peter peter@peter.com Member
ZZZZZZZZ-F0EE-11D3-B288-0000B4A488D2 Joan peter@peter.com Principal
AAAAAAAA-F0EE-11D3-EEEE-0000B4A488D3 Bob bob@bob.com Principal
关系可以是'Principal'或'Member',但主要用户也可以是成员。
电子邮件地址并非特定于用户(通常会员用户将拥有与主要用户相同的电子邮件地址)。
我需要确保每个电子邮件地址只选择1个用户,这样同一个人就不会通过电子邮件发送两次。如果同一用户有2封电子邮件,我需要选择主要记录。
最简单的方法是什么,记住你不能在uniqueidentifier字段上做最大值?对于我上面给出的样本数据,我只需要返回第二和第三条记录。
我倾向于按照关系排序,按照然后最大限度地进行分组,但我不认为这是可能的。
所需输出为UserId,Name,Email。
答案 0 :(得分:3)
ROW_NUMBER()中的ORDER BY
将允许您选择如何确定电子邮件的优先级。比如如何处理没有原则但只有多个成员的电子邮件(可能会添加, Name ASC
,以便选择具有第一个按字母顺序排列的名称的成员?)
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY Relationship DESC) AS sequence_id
FROM
yourTable
)
AS sequenced_table
WHERE
sequence_id = 1
答案 1 :(得分:0)
我不是很了解你,但是如果你只想收到一次电子邮件,那么这个代码会对原则用户产生影响:
select UserId, Name, Email, Relationship
from Table
where Relationship='Principle' or ( Relationship='Member' and Email not in
(
select Email
from Table
where Relationship='Principle'
)
)
这将为您提供第二行和第三行。如果有更多条件,请扩展您的示例。