Anahtar Başına Tek Satır Tutma
Coddy'nin SQL Journey'sinin Temellerin Ötesi bölümünün bir parçası. Ders 26 / 27.
Bir anahtarın (bir müşteri, bir sensör, bir ürün) bir tabloda birden çok kez göründüğü ve yalnızca en sonuncusunu veya en yüksek puana sahip olanı tutmak istediğiniz tablolarla sık sık karşılaşırsınız.
Top-N için yaptığın gibi ROW_NUMBER() kullan, ardından rn = 1 değerini koru.
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 “bu” anahtar başına bir sıralama demektir; ORDER BY ise “en yeni önce” demektir. Her bölümdeki 1. satır, saklamak istediğiniz satırdır.
Görev
OrtaKullanılabilir tablolar ve sütunlar:
readings:sensor_id,recorded_at,value
En az 3 okuması olan her sensör için, tek bir en yüksek değerli okumasını döndürün. İki okumanın value değeri eşitse, daha yeni olanı koruyun.
sensor_id, recorded_at, value değerlerini sensor_id'ye göre sıralanmış şekilde çıktı olarak verin.
Kendin dene
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
-- COUNT(*) OVER (PARTITION BY sensor_id) >= 3 okumaya sahip sensörleri filtrelemek için
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temellerin Ötesi bölümündeki tüm dersler
2String Fonksiyonları
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE ve TRIM|| ile BirleştirmeÖzet - Faturalar6Analitik Tarifleri
Grup Başına İlk NToplamın YüzdesiKümülatif ToplamAnahtar Başına Tek Satır TutmaÖzet - En İyi MüşterilerKendi başına pratik yap: SQL playground