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 où une clé (un client, un capteur, un produit) apparaît plusieurs fois et où vous souhaitez ne conserver que la plus récente, ou celle qui a le score le plus élevé.
Utilisez ROW_NUMBER() comme vous l’avez fait pour le top-N, puis gardez 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 indique « un classement par cette clé » ; ORDER BY indique « du plus récent au plus ancien ». La ligne 1 de chaque partition est celle que vous voulez conserver.
Défi
MoyenTables et colonnes disponibles :
readings:sensor_id,recorded_at,value
Pour chaque capteur ayant au moins 3 relevés, renvoie son unique relevé ayant la valeur la plus élevée. Si deux relevés ont la même value, conserve le plus récent.
Affiche sensor_id, recorded_at, value, triés par sensor_id.
Essayez vous-même
WITH ranked AS (
-- TODO: sélectionner chaque relevé avec son rang au sein de son capteur (rn)
-- et le nombre de relevés de ce capteur (total_readings)
)
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