Analitik fonksiyonlar, SQL-2003 ve SQL-2008 standartları ile tanımlanan fonksiyon grupları olup, kayıtları okurken, sıralama, gruplama ve kıyaslama gibi ek işlevler sunmak üzere tanımlanmışlardır. Bütün analitik fonksiyonları bir tek makalede ele almak kafa karıştırıcı olabilir. Bu nedenle, şimdilik basit bir örnek soru ve cevap eşliğinde en basit şekli ile ele alalım.
Analitik fonksiyonlar, SQL-2003 ve SQL-2008 standartları ile tanımlanan fonksiyon grupları olup, kayıtları okurken, sıralama, gruplama ve kıyaslama gibi ek işlevler sunmak üzere tanımlanmışlardır. Bütün analitik fonksiyonları bir tek makalede ele almak kafa karıştırıcı olabilir. Bu nedenle, bu makalede en çok ihtiyaç duyulanları ele alacağız.
Konunun daha kolay anlaşılması açısından, bir soru ile başlayalım:
Bir ürünler tablosu şu şekilde veriliyor: tblUrun(#urunKod, urunAd, listeFiyat). Bu tablodaki ürünleri, urunKod sütununa göre sıraladıktan sonra kendisinden bir önce gelen üründen daha pahalı ve kendisinden sonra gelen üründen daha ucuz olan ürünlerin listesini basit bir SELECT cümlesi ile nasıl bulursunuz?
Bu türden bir problemle SQL Server’da karşılaştığımızda bir çoğumuz çözüm olarak Cursor’ler üstünden ilerlemeyi düşünür. Geri kalanların bir kısmı Rütbeleme Fonksiyonları(Ranking Functions) üstünden ilerlemek üzere plan yapar. SQL Server 2012’deki yeniliklerden haberdar olanlar veya daha önceden Oracle’da bu tür sorgular yazmış olanlar da LEAD ve LAG fonksiyonları ile bu problemi basit bir SELECT ifadesinde bitirebileceğini bilir.
Örnek sorunun cevabı şu şekilde olabilir:
SELECT * FROM
(
SELECT urunKod,urunAd,listeFiyat,
LEAD(listeFiyat,1) OVER(ORDER BY urunKod) AS sonrakiListeFiyat,
LAG(listeFiyat,1) OVER (ORDER BY urunKod) as oncekiListeFiyat
FROM tblUrun
) T
WHERE listeFiyat > oncekiListeFiyat AND listeFiyat < sonrakiListeFiyat
Örnekte, LEAD, LAG fonksiyonları ile birlikte, bir adet de T türetilmiş tablosunu kullandık.

Şekil-1: LEAD ve LAG analitik fonksiyonları ile bir sonraki ve bir önceki değerleri kıyaslamak mümkündür.
Sonuç olarak analitik fonksiyonlar kullanmak bazen, cursor ve karmaşık hesaplamalarla yapılabilecek işlemleri kolayca yapabilmemizi sağlar.