Mantener una fila por clave
Parte de la sección Más allá de lo básico del Journey de SQL de Coddy — lección 26 de 27.
A menudo tendrás una tabla donde una clave (un cliente, un sensor, un producto) aparece varias veces y solo quieres conservar la más reciente, o la que tenga la puntuación más alta.
Utiliza ROW_NUMBER() de la misma manera que lo hiciste para top-N, luego mantén 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 = 1El PARTITION BY dice "una clasificación por cada esta clave"; el ORDER BY dice "el más reciente primero". La fila 1 en cada partición es la fila que desea conservar.
Desafío
IntermedioTablas y columnas disponibles:
<strong>readings</strong>:<strong>sensor_id</strong>,<strong>recorded_at</strong>,<strong>value</strong>
Para cada sensor que tenga al menos 3 lecturas, devuelve su única lectura de valor más alto. Si dos lecturas empatan en value, mantén la más reciente.
Muestra sensor_id, recorded_at, value, ordenados por sensor_id.
Hoja de referencia
Usa ROW_NUMBER() con PARTITION BY para mantener solo la fila más reciente (o la mejor) por clave, luego filtra 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 = 1PARTITION BY— reinicia la clasificación para cada clave únicaORDER BY ... DESC— coloca la fila deseada en primer lugar (la más reciente, la más alta, etc.)WHERE rn = 1— mantiene solo esa fila superior por partición
Pruébalo tú mismo
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
-- COUNT(*) OVER (PARTITION BY sensor_id) para filtrar sensores con >= 3 lecturas
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Más allá de lo básico
3Agregación condicional
COUNT con CASESUM con CASEPivotar filas a columnasResumen - Fuentes de tráfico6Recetas de Analítica
Top-N por grupoPorcentaje del totalTotal acumuladoMantener una fila por claveResumen - Mejores clientes