Eine Zeile pro Schlüssel behalten
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy. Lektion 26 von 27.
Du wirst oft eine Tabelle haben, in der ein Schlüssel (ein Kunde, ein Sensor, ein Produkt) mehrfach vorkommt und du nur den neuesten oder den mit der höchsten Punktzahl behalten möchtest.
Verwende ROW_NUMBER() genauso wie bei top-N und behalte dann rn = 1 bei.
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 bedeutet „eine Rangfolge pro diesem Schlüssel“; ORDER BY bedeutet „neueste zuerst“. Zeile 1 in jeder Partition ist die Zeile, die du behalten möchtest.
Aufgabe
MittelVerfügbare Tabellen und Spalten:
readings:sensor_id,recorded_at,value
Gib für jeden Sensor, der mindestens 3 Messwerte hat, seinen einzelnen Messwert mit dem höchsten Wert zurück. Wenn zwei Messwerte bei value gleichauf liegen, behalte den aktuelleren.
Gib sensor_id, recorded_at und value aus, sortiert nach sensor_id.
Probier es selbst
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
-- COUNT(*) OVER (PARTITION BY sensor_id) um Sensoren mit >= 3 Messungen zu filtern
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Über die Grundlagen hinaus
3Bedingte Aggregation
COUNT mit CASESUM mit CASEZeilen in Spalten umwandelnRückblick – Traffic-Quellen6Analyse-Rezepte
Top-N pro GruppeProzentualer Anteil an der GesamtsummeLaufende SummeEine Zeile pro Schlüssel behaltenRückblick – Top-KundenÜbe selbstständig: SQL-Playground