Jeden wiersz na klucz
Część sekcji Poza podstawami ścieżki SQL w Coddy. Lekcja 26 z 27.
Często będziesz mieć tabelę, w której klucz (klient, czujnik, produkt) pojawia się wielokrotnie, a chcesz zachować tylko najnowszy wpis lub ten z najwyższym wynikiem.
Użyj ROW_NUMBER() tak samo jak w przypadku top-N, a następnie zachowaj 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 oznacza „jeden ranking dla tego klucza”; ORDER BY oznacza „od najnowszego”. Wiersz 1 w każdej partycji to wiersz, który chcesz zachować.
Wyzwanie
ŚredniDostępne tabele i kolumny:
readings:sensor_id,recorded_at,value
Dla każdego czujnika, który ma co najmniej 3 odczyty, zwróć jego pojedynczy odczyt o najwyższej wartości. Jeśli dwa odczyty mają taką samą wartość w value, wybierz nowszy.
Zwróć sensor_id, recorded_at, value, posortowane według sensor_id.
Spróbuj swoich sił
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
-- COUNT(*) OVER (PARTITION BY sensor_id) do filtrowania czujników z co najmniej 3 odczytami
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Poza podstawami
3Agregacja warunkowa
COUNT z CASESUM z CASEPrzekształcanie wierszy w kolumnyPodsumowanie — źródła ruchu6Przepisy na analizy
Top N w każdej grupieProcent całościSuma narastającoJeden wiersz na kluczPodsumowanie — najlepsi klienciPoćwicz samodzielnie: Edytor online SQL