Oracle’da LEAD(), LAG() Analitik Fonksiyonları Kullanımı
Merhaba, Oracle ile çalışan herkesin şimdiye kadar kullanmadıysa bile mutlaka duyduğu analitik fonksiyonlardan olan LEAD() ve LAG() fonksiyonlarının kullanımını inceleyeceğiz.
Genel olarak tanımlamak gerekirse;
LEAD() : Belirli bir sıra halinde gelen veri setimizde ilgili satırın herhangi bir kolonunun bir sonraki satırda aldığı değeri verir. (Offset değerini değiştirerek 2 veya daha sonraki kolon değerine de ulaşabiliriz.)
Syntax : LEAD ( DEGERI_ISTENEN_KOLON, [offset]) OVER ( ORDER BY SIRALAMA_KOLONU)
Syntax : LEAD ( DEGERI_ISTENEN_KOLON, [offset]) OVER ( ORDER BY SIRALAMA_KOLONU)
Bir örnek üzerinden ilerleyerek fonksiyonların amacını ve kullanımını daha kolay inceleyebiliriz. Ay bazında ortalama sıcaklıkların saklandığı bir tablomuz (T_ORTALAMA_SICAKLIK) olsun.
CREATE TABLE T_ORTALAMA_SICAKLIK (ID NUMBER, AY NUMBER, AY_STR VARCHAR2(20), ORT_SICAKLIK NUMBER);
ve bu tabloda test yapabilmemiz için mantıklı değerler içeren satırlarımız,

kayıtları da ekledikten sonra ilk anda tabloyu sorguladığımızda aşağıdaki gibi bir görüntümüz olacaktır,

Aylar arasında nasıl bir sıcaklık değişikliği olduğu bilgisine ulaşmak için her ayın ORT_SICAKLIK kolonunun yanına önceki ve sonraki ay ortalamalarını eklemek istediğimiz zaman LEAD(), LAG() fonksiyonlarına ihtiyaç duyuyor olacağız.
Bu fonksiyonlar sayesinde, mevcut satırın bir önceki veya bir sonraki satırındaki değerleri kolayca alabiliriz.
Bu örneğimizde mantıklı sıralama AY kolonu üzerinden, öncekiyle sonraki satırlardan getirmek istediğimiz değerler ise ORT_SICAKLIK kolonlarındaki değerler olacak. (önceki ay bilgisi) LAG() bizim örneğimizde şu şekilde kullanılmalıdır : LAG(ORT_SICAKLIK, 1) OVER(ORDER BY AY), (sonraki ay) LEAD() fonksiyonu ise LEAD(ORT_SICAKLIK, 1) OVER(ORDER BY AY) şeklinde yer alacaktır. Sorgunun tamamı;
SELECT AY_STR, LAG (ORT_SICAKLIK, 1) OVER (ORDER BY AY) ONCEKI_AY_ORT, ORT_SICAKLIK, LEAD (ORT_SICAKLIK, 1) OVER (ORDER BY AY) SONRAKI_AY_ORT FROM T_ORTALAMA_SICAKLIK;
bu sorgudan elde edeceğimiz sonuç ise aşağıdaki gibi olacaktır.

Ay özelinde inceleyecek olursak MAYIS 2012 ortalama sıcaklığının(ORT_SICAKLIK) 17.5 iken aynı satırda önceki ay ortalamasının (ONCEKI_AY_ORT) 12.7, sonraki ay ortalamasının (SONRAKI_AY_ORT) 22.1 olduğunu görebiliyor olacağız. Böylelikle aynı satırda yer alan bu üç kolon üzerinde işlemler yapıp yüzde olarak değişiklik vb. gibi hesaplamalar yapmak da mümkün olacaktır. iyi çalışmalar.
