Como pegar o último registro de cada grupo em SQL
Use ROW_NUMBER para buscar o registro mais recente de cada cliente, matrícula, pedido ou outro grupo sem perder as demais colunas.
O problema
É comum precisar do último lançamento de cada cliente ou da movimentação mais recente de cada matrícula. MAX(data) encontra a maior data, mas não retorna automaticamente as outras colunas da mesma linha.
Solução com ROW_NUMBER()
WITH dados AS (
SELECT
p.*,
ROW_NUMBER() OVER (
PARTITION BY p.cliente_id
ORDER BY p.data_pedido DESC, p.id DESC
) AS rn
FROM pedidos p
)
SELECT *
FROM dados
WHERE rn = 1;
PARTITION BY reinicia a numeração para cada cliente. O ORDER BY coloca o registro mais recente em primeiro lugar.
Desempate é importante
Se duas linhas podem ter a mesma data, adicione um segundo critério estável, como o identificador:
ORDER BY data_movimento DESC, id DESC
Isso evita que o banco escolha arbitrariamente entre registros empatados.
Alternativa com MAX()
Quando você precisa somente da data mais recente, e não das demais colunas da linha, uma agregação simples pode ser suficiente.
SELECT cliente_id,
MAX(data_pedido) AS ultima_data
FROM pedidos
GROUP BY cliente_id;
Assuntos:ROW_NUMBERúltimo registrogrupo