sfmc // SQLPRODUÇÃO

ROW_NUMBER() com Desempate Determinístico

Torne a deduplicação determinística quando o timestamp principal puder empatar.

sqlrow_numberdeduptie breaker
Context Pack →Abrir Workspace →
Trust & provenancePRODUCTION
Nível de evidênciaPRODUCTIONFontes oficiais0Outras fontes0Última verificação2026-10-05

O nível de evidência descreve minha experiência com o conteúdo. Fonte oficial descreve contrato/documentação da plataforma. Observação de produção não deve ser tratada automaticamente como limite oficial.

EvidênciaPRODUÇÃO
Dificuldadeintermediário
Verificado2026-10-05
Use quando

Duas ou mais linhas podem compartilhar o mesmo critério principal de ordenação.

Migração ou reconciliação precisa produzir o mesmo vencedor em toda execução.

SELECT
    SubscriberKey,
    EmailAddress,
    ModifiedDate,
    RecordID
FROM (
    SELECT
        SubscriberKey,
        EmailAddress,
        ModifiedDate,
        RecordID,
        ROW_NUMBER() OVER (
            PARTITION BY SubscriberKey
            ORDER BY ModifiedDate DESC, RecordID DESC
        ) AS rn
    FROM [Source_DE]
) ranked
WHERE rn = 1
Por que funciona

ROW_NUMBER precisa de uma ordenação total dentro de cada partição. Uma segunda chave de ordenação estável remove a ambiguidade quando o timestamp principal empata.

Notas operacionais

O tie-breaker precisa ser significativo e estável; troque RecordID por um campo real e determinístico do seu modelo.

Gotchas

Se os dois campos do ORDER BY puderem empatar, o resultado ainda pode ser não determinístico.

Não use NEWID() como desempate quando você precisa de vencedores repetíveis.

Relacionados