SQL Server 2012 ile gelen yeni fonksiyonlardan LEAD ve LAG fonksiyonlarına daha önce değinmiştik. Şimdiki yazımızda ise First_Value fonksiyonunu inceleyim.
FISRT_VALUE()
First_Value fonksiyonu hedeflenen sonuç kümesi (result set) içerisinde ilk değeri elde etmemize imkan sağlar. Bu ilk değer istenirse daha farklı bir bölge içinde elde edilebilir.
Şimdi temel yazım şablonuna bakalım.
FIRST_VALUE ( [scalar_expression )
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
First_Value fonksiyonu parametre olarak bir değer almaktadır. Bu değer bir alan olabileceği gibi bir ifade de olabilir. OVER bileşeni üzerinde tanımlanan sıralama ve bölge ayarları elde edilecek değere etki eder.
Örneklerimizde SQL Server 2012 için üretilmiş AdventureWorks database kullanılmıştır.
Örnek 1
USE AdventureWorks2012;
GO
select SalesOrderID,CustomerID,OrderDate,TotalDue,
FIRST_VALUE(OrderDate) OVER (ORDER BY OrderDate) as FirstOrderDate
from Sales.SalesOrderHeader
where CustomerID = 29994
Yukarıdaki sorguyu çalıştırdığımda sonuçtada görmüş olduğunuz gibi 29994 CustomerIDli müşterimize ait ilk satış tarihini başarı ile elde ettik.
Örnek 2
select SalesOrderID,CustomerID,YEAR(OrderDate) as [Year],TotalDue,
FIRST_VALUE(CONVERT(DATE,OrderDate)) OVER (Partition BY Year(OrderDate) ORDER BYOrderDate) as FirstOrderDate
from Sales.SalesOrderHeader
where CustomerID = 29994
Sorgumuzu ve sonuçları incelediğimizde OVER içerisinde bulunan PARTITION BY ifadesi ile yıllar bazında ilk sipariş günlerini elde ettiğimiz gözükmektedir. Bu örnekte dikkat etmemiz gereken iki nokta daha mevcut.
1. Partition By ifadesinde YEAR fonksiyonunun kullanıldığı
2. First_Value fonksiyonuna verilen değerin CONVERT fonksiyonundan elde edildiği.
Recent Comments