Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitik Platform Sistemi (PDW)
Azure SQL Edge
SQL analytics endpoint in Microsoft Fabric
Warehouse SQL
databasein Microsoft Fabric
Sıralı bir değer kümesindeki son değeri döndürür.
Transact-SQL söz dizimi kuralları
Sözdizimi
LAST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Bağımsız değişken
scalar_expression
Döndürülecek değer. scalar_expression tek bir değerle sonuçlanacak bir sütun, alt sorgu veya başka bir ifade olabilir. Diğer analiz işlevlerine izin verilmez.
[ NULL'LARı YOKSAY | RESPECT NULLS ] **
için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Azure SQL Edge
IGNORE NULLS - Bir bölüm üzerinde son değeri hesaplarken veri kümesindeki null değerleri yoksayın.
RESPECT NULLS - Bir bölüm üzerinde son değer hesaplanırken veri kümesindeki null değerlere dikkat edin.
RESPECT NULLS, NULLS seçeneği belirtilmezse varsayılan davranıştır.
Azure SQL Edge'de bu bağımsız değişken hakkında daha fazla bilgi için bkz. Eksik değerleri.
OVER ( [ partition_by_clause] order_by_clause [ rows_range_clause ] )
partition_by_clause FROM yan tümcesi tarafından üretilen sonuç kümesini işlevin uygulandığı bölümlere böler. Belirtilmezse, işlev sorgu sonuç kümesinin tüm satırlarını tek bir grup olarak ele alır.
order_by_clause, işlev uygulanmadan önce verilerin sırasını belirler. order_by_clause gereklidir.
rows_range_clause, başlangıç ve bitiş noktalarını belirterek bölüm içindeki satırları daha da sınırlar.
Daha fazla bilgi için bkz. OVER Yan Tümcesi (Transact-SQL).
Dönüş türleri
scalar_expressionile aynı tür.
Açıklamalar
LAST_VALUE belirsiz değildir. Daha fazla bilgi için bkz. Deterministic ve nondeterministic functions.
Örnekler
A. Bölümler üzerinde LAST_VALUE kullanma
Aşağıdaki örnek, verilen maaş (Rate) için her departmandaki son çalışanın işe alma tarihini döndürür.
PARTITION BY yan tümcesi çalışanları departmana göre bölümler ve LAST_VALUE işlevi her bölüme bağımsız olarak uygulanır.
ORDER BY yan tümcesinde belirtilen OVER yan tümcesi, LAST_VALUE işlevinin her bölümdeki satırlara uygulandığı mantıksal sırayı belirler.
USE AdventureWorks2022;
GO
SELECT Department,
LastName,
Rate,
HireDate,
LAST_VALUE(HireDate) OVER (
PARTITION BY Department ORDER BY Rate
) AS LastValue
FROM HumanResources.vEmployeeDepartmentHistory AS edh
INNER JOIN HumanResources.EmployeePayHistory AS eph
ON eph.BusinessEntityID = edh.BusinessEntityID
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = edh.BusinessEntityID
WHERE Department IN (N'Information Services', N'Document Control');
Sonuç kümesi aşağıdadır.
Department LastName Rate HireDate LastValue
--------------------------- ----------------------- ------------ ---------- ----------
Document Control Chai 10.25 2003-02-23 2003-03-13
Document Control Berge 10.25 2003-03-13 2003-03-13
Document Control Norred 16.8269 2003-04-07 2003-01-17
Document Control Kharatishvili 16.8269 2003-01-17 2003-01-17
Document Control Arifin 17.7885 2003-02-05 2003-02-05
Information Services Berg 27.4038 2003-03-20 2003-01-24
Information Services Meyyappan 27.4038 2003-03-07 2003-01-24
Information Services Bacon 27.4038 2003-02-12 2003-01-24
Information Services Bueno 27.4038 2003-01-24 2003-01-24
Information Services Sharma 32.4519 2003-01-05 2003-03-27
Information Services Connelly 32.4519 2003-03-27 2003-03-27
Information Services Ajenstat 38.4615 2003-02-18 2003-02-23
Information Services Wilson 38.4615 2003-02-23 2003-02-23
Information Services Conroy 39.6635 2003-03-08 2003-03-08
Information Services Trenary 50.4808 2003-01-12 2003-01-12
B. hesaplanan ifadede FIRST_VALUE ve LAST_VALUE kullanma
Aşağıdaki örnek, hesaplanan ifadelerdeki FIRST_VALUE ve LAST_VALUE işlevlerini kullanarak, belirli bir çalışan sayısı için sırasıyla geçerli üç aylık dönemin satış kotası değeri ile yılın ilk ve son çeyreği arasındaki farkı gösterir.
FIRST_VALUE işlevi, yılın ilk çeyreği için satış kotası değerini döndürür ve geçerli üç aylık dönemin satış kotası değerinden çıkarır.
DifferenceFromFirstQuarteradlı türetilmiş sütunu döndürür. Yılın ilk çeyreğinde DifferenceFromFirstQuarter sütununun değeri 0'dır.
LAST_VALUE işlevi, yılın son çeyreğine ait satış kotası değerini döndürür ve geçerli çeyrek için satış kotası değerinden çıkarır.
DifferenceFromLastQuarteradlı türetilmiş sütunda döndürür. Yılın son çeyreğinde DifferenceFromLastQuarter sütununun değeri 0'dır.
RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING sütununda döndürülecek sıfır olmayan değerler için bu örnekte DifferenceFromLastQuarter yan tümcesi gereklidir. Varsayılan aralık RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Bu örnekte, bu varsayılan aralığın kullanılması (veya bir aralık dahil edilmemesi, varsayılanın kullanılmasıyla sonuçlanması) DifferenceFromLastQuarter sütununda sıfırların döndürülmesiyle sonuçlanır. Daha fazla bilgi için bkz. OVER Yan Tümcesi (Transact-SQL).
USE AdventureWorks2022;
GO
SELECT BusinessEntityID,
DATEPART(QUARTER, QuotaDate) AS Quarter,
YEAR(QuotaDate) AS SalesYear,
SalesQuota AS QuotaThisQuarter,
SalesQuota - FIRST_VALUE(SalesQuota) OVER (
PARTITION BY BusinessEntityID,
YEAR(QuotaDate) ORDER BY DATEPART(QUARTER, QuotaDate)
) AS DifferenceFromFirstQuarter,
SalesQuota - LAST_VALUE(SalesQuota) OVER (
PARTITION BY BusinessEntityID,
YEAR(QuotaDate) ORDER BY DATEPART(QUARTER, QuotaDate) RANGE BETWEEN CURRENT ROW
AND UNBOUNDED FOLLOWING
) AS DifferenceFromLastQuarter
FROM Sales.SalesPersonQuotaHistory
WHERE YEAR(QuotaDate) > 2005
AND BusinessEntityID BETWEEN 274
AND 275
ORDER BY BusinessEntityID,
SalesYear,
Quarter;
Sonuç kümesi aşağıdadır.
BusinessEntityID Quarter SalesYear QuotaThisQuarter DifferenceFromFirstQuarter DifferenceFromLastQuarter
---------------- ----------- ----------- --------------------- --------------------------- -----------------------
274 1 2006 91000.00 0.00 -63000.00
274 2 2006 140000.00 49000.00 -14000.00
274 3 2006 70000.00 -21000.00 -84000.00
274 4 2006 154000.00 63000.00 0.00
274 1 2007 107000.00 0.00 -9000.00
274 2 2007 58000.00 -49000.00 -58000.00
274 3 2007 263000.00 156000.00 147000.00
274 4 2007 116000.00 9000.00 0.00
274 1 2008 84000.00 0.00 -103000.00
274 2 2008 187000.00 103000.00 0.00
275 1 2006 502000.00 0.00 -822000.00
275 2 2006 550000.00 48000.00 -774000.00
275 3 2006 1429000.00 927000.00 105000.00
275 4 2006 1324000.00 822000.00 0.00
275 1 2007 729000.00 0.00 -489000.00
275 2 2007 1194000.00 465000.00 -24000.00
275 3 2007 1575000.00 846000.00 357000.00
275 4 2007 1218000.00 489000.00 0.00
275 1 2008 849000.00 0.00 -20000.00
275 2 2008 869000.00 20000.00 0.00