Menu
Coddy logo textTech

Garder une ligne par clé

Fait partie de la section Au-delà des bases du Journey SQL de Coddy. Leçon 26 sur 27.

Vous aurez souvent une table dans laquelle une clé (un client, un capteur, un produit) apparaît plusieurs fois et où vous souhaitez uniquement conserver la plus récente, ou celle ayant le score le plus élevé.

Utilisez ROW_NUMBER() de la même manière que pour le top-N, puis conservez 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 signifie « un classement par cette clé » ; ORDER BY signifie « les plus récentes en premier ». La ligne 1 de chaque partition est la ligne que vous souhaitez conserver.

challenge icon

Défi

Moyen

Tables et colonnes disponibles :

  • readings : sensor_id, recorded_at, value

Pour chaque capteur ayant au moins 3 relevés, renvoyez son unique relevé à la valeur la plus élevée. Si deux relevés ont la même value, conservez le plus récent.

Affichez sensor_id, recorded_at et value, triés par sensor_id.

Essayez vous-même

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
    -- COUNT(*) OVER (PARTITION BY sensor_id) pour filtrer les capteurs avec >= 3 lectures
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Au-delà des bases

Entraînez-vous par vous-même : Playground SQL