Yandex Metrica
SQL Server'da LAG() ve LEAD() Kullanımı - Yasin Sunmaz

Yasin Sunmaz

Kodladıkça değişen bir dünya...

SQL Server'da LAG() ve LEAD() Kullanımı

23.05.2025 yasinsunmaz 502 0

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.

Diğer Yazılar

SQL Server Schema Kullanımı

10.12.2025 yasinsunmaz 143 0

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 SELECT INTO ve INSERT INTO SELECT Kullanımı

31.05.2025 yasinsunmaz 481 0

Bu yazımda, SQL Server'da oldukça sık kullanılan ve günlük veri işlemlerinde hayat kurtaran iki komutu inceleyeceğiz: SELECT INTO ve INSERT INTO SELECT. Bu ...

SQL Fonksiyonları: Veritabanlarında Güçlü ve Esnek İşlemler

09.06.2023 yasinsunmaz 1392 0

SQL (Structured Query Language), veritabanı yönetim sistemlerinde verileri yönetmek, sorgulamak ve işlemek için yaygın olarak kullanılan bir dildir. SQL fonksiyonl...

SQL'e Dair Her Şey OneSQL'de, Ne Ararsanız Bulabileceksiniz

03.06.2023 yasinsunmaz 645 0

Veri tabanı yöneticilerinin yanında zaman zaman yazılımcıların da SQL'i aktif olarak kullanması gerekebiliyor. SQL'i belli başlı şekillder kullanıp işlemlerimizi ...