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 = 1PARTITION 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.
Défi
MoyenTables 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
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
1Logique conditionnelle
CASE WHENCASE dans ORDER BYCOALESCE pour les NULLNULLIF et IIFRécapitulatif - Présence3Agrégation conditionnelle
COUNT avec CASESUM avec CASEPivoter les lignes en colonnesRécapitulatif - Sources de trafic6Recettes d’analyse
Top-N par groupePourcentage du totalTotal cumuléGarder une ligne par cléRécapitulatif - Meilleurs clientsEntraînez-vous par vous-même : Playground SQL