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.
Sıklıkla bir anahtarın (bir müşteri, bir sensör, bir ürün) birden fazla kez göründüğü bir tablonuz olur ve sadece en güncel olanı veya en yüksek puana sahip olanı tutmak istersiniz.
ROW_NUMBER() fonksiyonunu top-N için yaptığınız gibi kullanın, ardından rn = 1 olanları tutun.
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 ifadesi "*bu* anahtar başına bir sıralama" der; ORDER BY ifadesi "en yeni olan en başta" der. Her bölümdeki 1. satır, tutmak istediğiniz satırdır.
Görev
OrtaMevcut tablolar ve sütunlar:
<strong>readings</strong>:<strong>sensor_id</strong>,<strong>recorded_at</strong>,<strong>value</strong>
En az 3 okumaya sahip her bir sensör için, tek bir en yüksek değerli okumasını döndürün. Eğer iki okuma value üzerinde eşitse, daha güncel olanı tutun.
sensor_id, recorded_at, value sütunlarını sensor_id değerine göre sıralı olarak çıktı verin.
Kopya kağıdı
Her anahtar için yalnızca en son (veya en iyi) satırı tutmak için ROW_NUMBER() işlevini PARTITION BY ile kullanın, ardından rn = 1 şeklinde filtreleyin:
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— her benzersiz anahtar için sıralamayı sıfırlarORDER BY ... DESC— istenen satırı ilk sıraya koyar (en yeni, en yüksek, vb.)WHERE rn = 1— her bölüm için yalnızca o en üstteki satırı tutar
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 veya daha fazla 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üşteriler