Bu yazımda SQL Server'da oldukça faydalı olan schema yapısını inceleyeceğiz. SQL Server’da şema yapısı özellikle orta ve büyük ö...
SQL Server'da LAG() ve LEAD() Kullanımı
Bu yazımda SQL Server'da oldukça faydalı olan LAG() ve LEAD() fonksiyonlarını inceleyeceğiz. Bu fonksiyonlar, bir satırdaki veriye bakarken, o satırın öncesindeki veya sonrasındaki satırdaki veriye de erişebilmemizi sağlar. Bu özellikleri sayesinde özellikle analitik raporlama, zaman serisi analizleri, trend hesaplamaları gibi işlemlerde yararlı olabilir.
Bu yazıda, bu iki fonksiyonu farklı örneklerle açıklamaya çalıştım. Örneklerde Nortwind veri tabanını kullandım. Veri tabanını sisteminize yükleyerek sorguları test edebilirsiniz. Eğer veri tabanını nasıl çalıştıracağınızı bilmiyorsanız SQL Server Script Alma ve Çalıştırma adlı yazımı inceleyebilirsiniz.
LAG() Fonksiyonu Nedir?
LAG() fonksiyonu, mevcut satırdan önceki satırların verisine erişmek için kullanılır. Yine, kaç satır öncesine erişmek istediğinizi belirleyebilirsiniz. Eğer belirtilen kadar önce veri yoksa sonuç NULL olarak döner.
Basit LAG() Kullanımı
Aşağıda FirstName alanına göre sıralanmış verilere göre 1 ve 3 satır öncesi veriler çekiliyor:
SELECT
FirstName,
LAG(FirstName, 1) OVER (ORDER BY FirstName) AS FirstName1LAG,
LAG(FirstName, 3) OVER (ORDER BY FirstName) AS FirstName3LAG
FROM Employees
EmployeeID Sıralamasıyla LAG() Kullanımı
Bu örnekte sıralama EmployeeID'ye göre yapılmakta:
SELECT
FirstName,
LAG(FirstName, 1) OVER (ORDER BY EmployeeID) AS FirstName1LAG,
LAG(FirstName, 3) OVER (ORDER BY EmployeeID) AS FirstName3LAG
FROM Employees
Birden Fazla Kolonla LAG() Kullanımı
Aşağıdaki sorgu hem FirstName hem de LastName alanlarının önceki satırlardaki karşılıklarını gösterir:
SELECT
FirstName,
LastName,
LAG(FirstName, 1) OVER (ORDER BY EmployeeID) AS FirstName1LAG,
LAG(LastName, 1) OVER (ORDER BY EmployeeID) AS LastName1LAG,
LAG(FirstName, 3) OVER (ORDER BY EmployeeID) AS FirstName3LAG,
LAG(LastName, 3) OVER (ORDER BY EmployeeID) AS LastName3LAG
FROM Employees
LEAD() Fonksiyonu Nedir?
LEAD() fonksiyonu, LAG() fonksiyonunun tam tersidir. Mevcut satırdan sonraki satırların verisine erişmek için kullanılır. Kaç satır sonrasına erişmek istediğinizi belirtebilirsiniz. Eğer veri kümesinde o kadar sonraki bir satır yoksa NULL olarak döner.
Basit LEAD() Kullanımı
Aşağıdaki örnekte Employees tablosunda, FirstName sütununu kullanarak sıralanmış verilerde, her bir çalışanın 1 ve 3 satır sonrasındaki FirstName değerlerine ulaşıyoruz:
SELECT
FirstName,
LEAD(FirstName, 1) OVER (ORDER BY FirstName) AS FirstName1LEAD,
LEAD(FirstName, 3) OVER (ORDER BY FirstName) AS FirstName3LEAD
FROM Employees
EmployeeID Sıralamasıyla LEAD() Kullanımı
Bu örnekte sıralama kriteri olarak EmployeeID kullanılıyor:
SELECT
FirstName,
LEAD(FirstName, 1) OVER (ORDER BY EmployeeID) AS FirstName1LEAD,
LEAD(FirstName, 3) OVER (ORDER BY EmployeeID) AS FirstName3LEAD
FROM Employees
Birden Fazla Kolonla LEAD() Kullanımı
Bu örnekte hem FirstName hem de LastName kolonlarının 1 ve 3 satır sonrasındaki değerlerini alıyoruz:
SELECT
FirstName,
LastName,
LEAD(FirstName, 1) OVER (ORDER BY EmployeeID) AS FirstName1LEAD,
LEAD(LastName, 1) OVER (ORDER BY EmployeeID) AS LastName1LEAD,
LEAD(FirstName, 3) OVER (ORDER BY EmployeeID) AS FirstName3LEAD,
LEAD(LastName, 3) OVER (ORDER BY EmployeeID) AS LastName3LEAD
FROM Employees
Sonuç
LAG() ve LEAD() fonksiyonları, geçmiş ve gelecek satırlarla ilgili analizler yapmamızı sağlayan fonksiyonlardır. Kısaca sıralı verilerde trendleri görmek, önceki ya da sonraki değerlerle karşılaştırma yapmak, zamana bağlı analizlerde verileri yan yana göstermek gibi işlemler için oldukça kullanışlıdır.
Ancak bu fonksiyonlar büyük veri kümelerinde kullanıldığında performans etkilerini göz önünde bulundurmak gerekir. Siz de bu fonksiyonları nasıl kullandığınızı ya da farklı kullanım senaryolarınızı paylaşmak isterseniz yorumlarda yazabilirsiniz.
Umarım faydalı olmuştur. İyi çalışmalar!

Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.