Plenowindow functiondeduplicação
ROW_NUMBER na prática: deduplicação e top-N por grupo
Publicado em 2025-03-08
Pergunta
Como remover duplicatas mantendo apenas o registro mais recente por cliente?
Explicação
ROW_NUMBER atribui um inteiro sequencial dentro de cada partição, ordenado por uma expressão. É a ferramenta padrão para deduplicação determinística e para puxar o "último evento" de cada entidade.
Query SQL
sql
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY cliente_id
ORDER BY atualizado_em DESC, id DESC
) AS rn
FROM cadastros
)
SELECT *
FROM ranked
WHERE rn = 1;Resposta esperada
Uma linha por cliente, sempre a mais recente. O tiebreaker por id evita inconsistência quando dois registros têm o mesmo timestamp.
Erros comuns
- Usar DISTINCT achando que resolve deduplicação por chave de negócio
- Ordenar apenas por data e ter resultados não determinísticos em empates
- Aplicar ROW_NUMBER sem CTE e tentar filtrar no mesmo nível do SELECT
Dica de entrevista
Sempre adicione um tiebreaker estável (id, uuid) no ORDER BY de window functions usadas para deduplicação.