Menu
Coddy logo textTech

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 = 1

El 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.

challenge icon

Desafío

Intermedio

Tablas 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 = 1
  • PARTITION BY — reinicia la clasificación para cada clave única
  • ORDER 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
quiz iconPonte a prueba

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