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.

Compartilhar: