Menu
CoddyTech

Mantendo uma Linha por Chave

Parte da seção Além do Básico do Journey de SQL da Coddy. Lição 26 de 27.

Você frequentemente terá uma tabela em que uma chave (um cliente, um sensor, um produto) aparece várias vezes e só vai querer manter o registro mais recente ou aquele com a maior pontuação.

Use ROW_NUMBER() da mesma forma que você usou para top-N e, em seguida, mantenha rn = 1.

WITH ranked AS (
    SELECT *,
           ROW_NUMBER() OVER (
               PARTITION BY customer_id ORDER BY purchased_at DESC
           ) AS rn
    FROM purchases
)
SELECT * FROM ranked WHERE rn = 1

O PARTITION BY indica “uma classificação por esta chave”; o ORDER BY indica “mais recentes primeiro”. A linha 1 de cada partição é a linha que você quer manter.

challenge icon

Desafio

Médio

Tabelas e colunas disponíveis:

  • readings: sensor_id, recorded_at, value

Para cada sensor que tenha pelo menos 3 leituras, retorne sua única leitura de maior valor. Se duas leituras empatarem em value, mantenha a mais recente.

Exiba sensor_id, recorded_at, value, ordenados por sensor_id.

Experimente você mesmo

WITH ranked AS (
    -- TODO: selecione cada leitura com sua posição dentro do respectivo sensor (rn)
    -- e a quantidade de leituras desse sensor (total_readings)
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Além do Básico

Pratique por conta própria: Playground de SQL