Sql Server группа по нескольким столбцам уникальность только по одному столбцу - PullRequest
5 голосов
/ 21 мая 2011

Я создаю систему для отправки электронных писем, и мне нужно зайти в таблицу [User], чтобы получить электронное письмо для отправки, а также GUID (тип уникального идентификатора), который будет использоваться для отмены подписки.

Это решение для электронной коммерции, поэтому анонимные и вошедшие в систему пользователи могут иметь одинаковые адреса электронной почты, что создает повторяющиеся записи электронных писем, которые должны различаться в запросе.

У меня проблеманайти решение для извлечения электронной почты и руководства, но только различаться в электронной почте.Вот мой запрос.

SELECT Email, User_GUID
FROM [User]
WHERE 
    IsActive = 1 AND 
    IsEmailValid = 1 AND
    IsNotActiveBecauseUnsubscribed = 0 AND
    Subscribed = 1
GROUP BY Email, User_GUID

Ответы [ 2 ]

8 голосов
/ 21 мая 2011
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

или

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
0 голосов
/ 21 мая 2011

Вы могли бы сделать

SELECT Distinct Email, User_GUID
FROM [User]
WHERE IsActive = 1 AND IsEmailValid = 1 And IsNotActiveBecauseUnsubscribed = 0 AND Subscribed = 1
GROUP BY Email, User_GUID
...