Deduplicar registros com ROW_NUMBER() numa Query Activity
Fique com só o registro mais recente de cada e-mail numa Data Extension usando ROW_NUMBER() e PARTITION BY numa Query Activity do Marketing Cloud.
Importações de leads costumam trazer o mesmo e-mail várias vezes. Se a Data Extension de destino tem o e-mail como chave primária, a Query Activity falha com violação de chave primária. Se não tem, você manda o mesmo e-mail duas vezes para a mesma pessoa. A solução é ficar com um registro por e-mail, normalmente o mais recente.
O snippet
SELECT
t.Email,
t.Nome,
t.Origem,
t.DataCadastro
FROM (
SELECT
l.Email,
l.Nome,
l.Origem,
l.DataCadastro,
ROW_NUMBER() OVER (
PARTITION BY LOWER(LTRIM(RTRIM(l.Email)))
ORDER BY l.DataCadastro DESC
) AS ordem
FROM Leads_Importados l
WHERE l.Email IS NOT NULL
AND l.Email <> ''
) t
WHERE t.ordem = 1Como funciona
ROW_NUMBER()numera as linhas dentro de cada grupo, começando em 1.PARTITION BYdefine o grupo: aqui, cada e-mail.LOWER(LTRIM(RTRIM(...)))faz "Ana@X.com " e "ana@x.com" caírem no mesmo grupo.ORDER BY DataCadastro DESCcoloca o registro mais recente como número 1.- O
WHERE t.ordem = 1de fora fica só com esse registro.
A numeração precisa estar numa subconsulta: o WHERE da mesma consulta não enxerga a coluna ordem.
Escolhendo o "melhor" registro
O ORDER BY decide quem vence o empate. Alguns critérios comuns:
| Quero ficar com… | ORDER BY |
|---|---|
| o mais recente | DataCadastro DESC |
| o mais antigo (primeira origem) | DataCadastro ASC |
| o que tem telefone preenchido | CASE WHEN Telefone IS NULL OR Telefone = '' THEN 1 ELSE 0 END, DataCadastro DESC |
Na Query Activity
- Data Extension de destino com
Emailcomo chave primária. - Ação Overwrite para um público limpo a cada execução, ou Update para ir acumulando (a versão mais nova de cada e-mail substitui a anterior).
- Se a Data Extension de origem for grande, filtre pela data dentro da subconsulta para não estourar os 30 minutos de limite da Query Activity.
Leia também
| Título | Tipo | Plataforma | Faixa | Leitura |
|---|---|---|---|---|
| Lookup dentro de loop no AMPscript: rápido no teste, lento no envio real | Erro | Marketing Cloud Engagement | Verde | 3 min |
| Query Activity que estoura os 30 minutos e para a automação | Erro | Marketing Cloud Engagement | Verde | 3 min |
| Data Views no SQL: quem abriu ou clicou nos últimos 30 dias | Tutorial | Marketing Cloud Engagement | Verde | 3 min |
| Subscriber Key igual ao e-mail: o cliente que troca de e-mail vira outra pessoa | Erro | Marketing Cloud Engagement | Amarela | 4 min |