Ana içeriğe geç
Modül 13 · Ders 4 ders 4Kurstaki 52/57~12 min
Modül dersleri (4/4)

Geçişler: LAG ve LEAD

Geçişler: LAG ve LEAD

Sıralı ve zamana dayalı verilerde, genellikle mevcut satırı önceki günkü satırla karşılaştırmanız gerekir. "Standart" SQL'de bunu yapmak çok tehlikeli (ve çok yavaş) kendi kendine katılmayı gerektirir.

LAG() (önceki satır) ve LEAD() (sonraki satır) işlevleri, bu sorunu son derece çevik ve zarif bir şekilde tam olarak çözer.

Geçmişe ve Geleceğe Bakmak

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

Örnekte, her satır aynı tablonun ürettiği miktarı bir satır ileri kaydırılarak (zamanda geriye doğru) rahatlıkla taşıyacaktır. Farkı veya aydan aya yüzde değişimlerini hesaplamak için total_amount - LAG(...) değerini kolayca çıkarabiliriz!

Benzer şekilde, LEAD() değeri geçerli satırın hemen altındaki satırdan çekecektir.

Egzersiz#sql.m13.l4.e1
Denemeler: 0Yükleniyor…

'Ürünler' tablosundan, 'id', 'launched_on', 'price'ı çıkarın ve 'prev_price'ı ekleyin, yani ürünün 'fiyatı' mantıksal olarak artan 'launched_on' sırasıyla 'önceki' fiyat olarak kabul edilir.

Düzenleyici yükleniyor…
İpucu göster

LAG(price) OVER(ORDER BY launch_on ASC) kullanın

3 denemeden sonra çözüm mevcut

Egzersiz#sql.m13.l4.e2
Denemeler: 0Yükleniyor…

Bireysel kullanıcı başına derecelendirme artışlarını nasıl hesaplarsınız? Simüle edin: 'incelemeler' tablosundan 'customer_id', 'created_at', 'rating' ve 'next_rating'i (zaman içinde aynı müşterinin bir sonraki incelemesi) çıkarın. Yani 'customer_id'ye göre bölümleyin, 'created_at'e göre sıralayın ve ileriye bakmak için sağ pencere işlevini kullanın.

Düzenleyici yükleniyor…
İpucu göster

OVER'da PARTITION BY ve ORDER BY ile birlikte LEAD().

3 denemeden sonra çözüm mevcut