ROW_NUMBER()
Sintaxe, PARTITION BY, paginação, deduplicação e latest row per group.
Ver guiaPostgreSQL SQL
Use este guia para escolher a função certa, escrever consultas previsíveis e navegar para exemplos completos de cada padrão.
Funções de janela calculam um valor usando linhas relacionadas sem reduzir o resultado a uma linha por grupo. O ORDER BY dentro de OVER() define a ordem da janela, e PARTITION BY reinicia o cálculo em cada grupo.
SELECT customer_id,
created_at,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY created_at DESC
) AS row_number
FROM orders;
| Função | Use quando | Empates |
|---|---|---|
| ROW_NUMBER() | Você precisa de um número único por linha, paginação ou a linha mais recente por grupo. | Quebrados arbitrariamente sem critério extra. |
| RANK() | Você quer preservar a posição após um empate. | Cria lacunas. |
| DENSE_RANK() | Você quer ranking sem lacunas. | Sem lacunas. |
| LAG() / LEAD() | Você precisa comparar uma linha com a anterior ou a próxima. | — |
Sintaxe, PARTITION BY, paginação, deduplicação e latest row per group.
Ver guiaEntenda os empates e escolha a função de ranking correta.
Ver guiaCompare valores anteriores e seguintes em séries temporais.
Ver guiaUse EXPLAIN ANALYZE para comparar estimativas e linhas reais antes de mudar índices ou parâmetros. Para observar regressões e padrões em produção, monitore o comportamento das queries ao longo do tempo.