Sql Server组由多列唯一性组成,仅在一列上

Bra*_*rad 5 sql t-sql sql-server group-by sql-server-2008

我正在构建一个发送电子邮件的系统,我需要进入[User]表来检索要发送的电子邮件,以及将用于取消订阅目的的GUID(uniqueidentifier类型).

它适用于电子商务解决方案,因为匿名用户和登录用户可以拥有相同的电子邮件地址,因此会创建需要在查询中区分的重复电子邮件条目.

我无法找到检索电子邮件和guid的解决方案,但只能在电子邮件中有所区别.这是我到目前为止的查询.

SELECT Email, User_GUID
FROM [User]
WHERE 
    IsActive = 1 AND 
    IsEmailValid = 1 AND
    IsNotActiveBecauseUnsubscribed = 0 AND
    Subscribed = 1
GROUP BY Email, User_GUID
Run Code Online (Sandbox Code Playgroud)

Ale*_*Aza 8

with cte
as
(
    select *, row_number() over (partition by Email order by User_GUID) RowNumber
    from [User]
    where 
        IsActive = 1 and 
        IsEmailValid = 1 and 
        IsNotActiveBecauseUnsubscribed = 0 and 
        Subscribed = 1
)
select Email, User_GUID
from cte
where RowNumber = 1
Run Code Online (Sandbox Code Playgroud)

要么

select Email, User_GUID
from
(
    select *, row_number() over (partition by Email order by User_GUID) RowNumber
    from [User]
    where 
        IsActive = 1 and 
        IsEmailValid = 1 and 
        IsNotActiveBecauseUnsubscribed = 0 and 
        Subscribed = 1
) tt
where RowNumber = 1
Run Code Online (Sandbox Code Playgroud)