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
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.
'Ü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.
İpucu göster
LAG(price) OVER(ORDER BY launch_on ASC) kullanın
3 denemeden sonra çözüm mevcut
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.
İpucu göster
OVER'da PARTITION BY ve ORDER BY ile birlikte LEAD().
3 denemeden sonra çözüm mevcut