CodePráticov3.3.0
SQL

ROW_NUMBER() em SQL com exemplos práticos

Veja como numerar registros, selecionar o primeiro de cada grupo, remover duplicidades e criar paginação com ROW_NUMBER().

Numeração básica

SELECT
    id,
    nome,
    ROW_NUMBER() OVER (ORDER BY nome) AS numero
FROM alunos;

O resultado recebe uma numeração sequencial conforme a ordenação informada.

Reiniciar por grupo

SELECT
    turma_id,
    nome,
    ROW_NUMBER() OVER (
        PARTITION BY turma_id
        ORDER BY nome
    ) AS ordem_na_turma
FROM alunos;

Selecionar uma linha por grupo

WITH ranked AS (
    SELECT
        p.*,
        ROW_NUMBER() OVER (
            PARTITION BY cliente_id
            ORDER BY data_pedido DESC, id DESC
        ) AS rn
    FROM pedidos p
)
SELECT *
FROM ranked
WHERE rn = 1;

Identificar duplicados mantendo um registro

WITH ranked AS (
    SELECT
        a.*,
        ROW_NUMBER() OVER (
            PARTITION BY cpf
            ORDER BY id
        ) AS rn
    FROM alunos a
)
SELECT *
FROM ranked
WHERE rn > 1;
Cuidado: revise o resultado antes de transformar essa consulta em uma exclusão.