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 Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
SQL Server 2012 (11.x) ile başlayan self-join kullanmadan aynı sonuç kümesindeki sonraki satırdan veriye erişir.
LEAD mevcut satırı takip eden belirli bir fiziksel ofsette bir satıra erişim sağlar. Bu analitik fonksiyonu bir ifadede SELECT kullanarak mevcut satırdaki değerleri sonraki satırdaki değerlerle karşılaştırın.
Transact-SQL söz dizimi kuralları
Sözdizimi
LEAD ( scalar_expression [ , offset ] [ , default ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause )
Arguments
scalar_expression
Belirtilen ofsete göre iade edilecek değer. Bu, tek bir (skaler) değer döndüren herhangi bir tür ifadedir. scalar_expression analitik bir fonksiyon olamaz.
ofset
Mevcut satırdan ileriye doğru bir değer elde edilecek satır sayısı. Belirtilmezse, varsayılan değer 1'dir. Ofset , pozitif tam sayıya değerlenen veya örtük olarak bigint'e dönüştürülebilecek bir sütun, alt sorgu veya başka bir ifade olabilir. Ofset negatif bir değer veya analitik fonksiyon olamaz.
varsayılan
Kaydırıldığında döndürülecek değer bölümün kapsamının dışındadır. Varsayılan değer belirtilmemişse, NULL geri döner.
varsayılan bir sütun, alt sorgu veya başka bir ifade olabilir, ancak analitik bir fonksiyon olamaz.
varsayılanolarak scalar_expression ile tip uyumlu olmalıdır.
[ NULL'LARı YOKSAY | RESPECT NULLS ]
Uygulanır: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Database, Azure SQL Managed Instance, Azure SQL Edge
IGNORE NULLS - Bir bölüm üzerinden ilk değeri hesaplarken veri setindeki değerleri görmezden NULL gelin.
RESPECT NULLS - Bir bölüm üzerinden ilk değeri hesaplarken veri setindeki değerlere saygı NULL gösterin.
RESPECT NULLS bir NULLS seçenek belirtilmemişse varsayılan davranıştır.
SQL Server 2022 CU4'te ve IGNORE NULLSLAGile ilgili LEAD bir hata düzeltildi.
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 )
partition_by_clause yan tümcesi tarafından
FROMü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 , fonksiyon uygulanmadan önceki verilerin sırasını belirler.
partition_by_clause belirtildiğinde, her bölümdeki verilerin sırasını belirler. order_by_clause zorunludur. Daha fazla bilgi için bkz. SELECT - OVER Maddesi.
Dönüş türleri
Belirtilen scalar_expression veri türü.
NULL
scalar_expression nullable olursa veya varsayılan olarak NULLayarlanmışsa döner.
LEAD belirsiz değildir. Daha fazla bilgi için bkz . Deterministic ve Nondeterministic Functions.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Yıllar arasındaki değerleri karşılaştırın
Sorgu, belirli bir çalışanın sonraki yıllardaki satış kotalarındaki farkı döndürmek için LEAD bu fonksiyonu kullanır. Son satır için potansiyel müşteri değeri olmadığı için, varsayılan sıfır (0) döner.
USE AdventureWorks2022;
GO
SELECT BusinessEntityID,
YEAR(QuotaDate) AS SalesYear,
SalesQuota AS CurrentQuota,
LEAD(SalesQuota, 1, 0) OVER (ORDER BY YEAR(QuotaDate)) AS NextQuota
FROM Sales.SalesPersonQuotaHistory
WHERE BusinessEntityID = 275 AND YEAR(QuotaDate) IN ('2005', '2006');
Sonuç kümesi aşağıdadır.
BusinessEntityID SalesYear CurrentQuota NextQuota
---------------- ----------- --------------------- ---------------------
275 2005 367000.00 556000.00
275 2005 556000.00 502000.00
275 2006 502000.00 550000.00
275 2006 550000.00 1429000.00
275 2006 1429000.00 1324000.00
275 2006 1324000.00 0.00
B. Bölümler içindeki değerleri karşılaştırın
Aşağıdaki örnek, çalışanlar arasındaki yılbaşından bu kadar satışları karşılaştırmak için bu fonksiyonu kullanır LEAD . Bu madde, PARTITION BY satış bölgesine göre sonuç kümesinde satırları bölmek için belirlenmiştir. Fonksiyon LEAD her bölüme ayrı ayrı uygulanır ve hesaplama her bölüm için yeniden başlar. Şartta ORDER BY belirtilen cümleOVER, fonksiyon uygulanmadan önce her bölümdeki satır sırasını düzenler. Cümledeki ORDER BY cümleSELECT, tüm sonuç kümesindeki satırları sıralar. Her bölümün son satırında potansiyel müşteri değeri olmadığından, varsayılan sıfır (0) döner.
USE AdventureWorks2022;
GO
SELECT TerritoryName, BusinessEntityID, SalesYTD,
LEAD (SalesYTD, 1, 0) OVER (PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS NextRepSales
FROM Sales.vSalesPerson
WHERE TerritoryName IN (N'Northwest', N'Canada')
ORDER BY TerritoryName;
Sonuç kümesi aşağıdadır.
TerritoryName BusinessEntityID SalesYTD NextRepSales
----------------------- ---------------- --------------------- ---------------------
Canada 282 2604540.7172 1453719.4653
Canada 278 1453719.4653 0.00
Northwest 284 1576562.1966 1573012.9383
Northwest 283 1573012.9383 1352577.1325
Northwest 280 1352577.1325 0.00
C. Rastgele ifadeler belirtin
Aşağıdaki örnek, fonksiyon sözdiziminde NULL çeşitli rastgele ifadelerin belirtilmesini ve değerlerin LEAD göz ardı edilmesini gösterir.
CREATE TABLE T (a INT, b INT, c INT);
GO
INSERT INTO T VALUES (1, 1, -3), (2, 2, 4), (3, 1, NULL), (4, 3, 1), (5, 2, NULL), (6, 1, 5);
SELECT b, c,
LEAD(2 * c, b * (SELECT MIN(b) FROM T), -c / 2.0) IGNORE NULLS OVER (ORDER BY a) AS i
FROM T;
Sonuç kümesi aşağıdadır.
b c i
----------- ----------- -----------
1 5 -2
2 NULL NULL
3 1 0
1 NULL 2
2 4 2
1 -3 8
D. NULL olmayan değerleri bulmak için NULLS'u IGNORE kullanın
Aşağıdaki numune sorgu, argümanın IGNORE NULLS kullanıldığını gösterir.
Argüman, IGNORE NULLS hem LAG ile hem de LEAD önceki veya sonraki NULL olmayan değerlerin yerine değerlerin yer NULL değiştirmesini göstermek için kullanılır.
- Eğer önceki satır ile
NULLbirlikteyseLAG, mevcut satır en güncel olmayanNULLdeğeri kullanır. - Eğer sonraki satırda bir ile
NULLbirLEADvarsa, mevcut satır bir sonraki mevcut olmayanNULLdeğeri kullanır.
DROP TABLE IF EXISTS #test_ignore_nulls;
CREATE TABLE #test_ignore_nulls (column_a int, column_b int);
GO
INSERT INTO #test_ignore_nulls VALUES
(1, 8),
(2, 9),
(3, NULL),
(4, 10),
(5, NULL),
(6, NULL),
(7, 11);
SELECT column_a, column_b,
[Previous value for column_b] = LAG(column_b) IGNORE NULLS OVER (ORDER BY column_a),
[Next value for column_b] = LEAD(column_b) IGNORE NULLS OVER (ORDER BY column_a)
FROM #test_ignore_nulls
ORDER BY column_a;
--cleanup
DROP TABLE #test_ignore_nulls;
column_a column_b Previous value for column_b Next value for column_b
------------ ----------- ------------------------------ ------------------------
1 8 NULL 9
2 9 8 10
3 NULL 9 10
4 10 9 11
5 NULL 10 11
6 NULL 10 11
7 11 10 NULL
E. Değerleri korumak NULL için RESPECT NULLS kullanın
Aşağıdaki örnek sorgu, önceki örnekteki argümanın aksine, belirtilmemişse RESPECT NULLS varsayılan davranış olan argümanı IGNORE NULLS kullanmayı gösterir.
- Eğer önceki satır ile
NULLbirlikteyseLAG, mevcut satır en güncel değeri kullanır. - Eğer bir sonraki satırda bir
NULLileLEADbir varsa, mevcut satır da bir sonraki değeri kullanır.
DROP TABLE IF EXISTS #test_ignore_nulls;
CREATE TABLE #test_ignore_nulls (column_a int, column_b int);
GO
INSERT INTO #test_ignore_nulls VALUES
(1, 8),
(2, 9),
(3, NULL),
(4, 10),
(5, NULL),
(6, NULL),
(7, 11);
SELECT column_a, column_b,
[Previous value for column_b] = LAG(column_b) RESPECT NULLS OVER (ORDER BY column_a),
[Next value for column_b] = LEAD(column_b) RESPECT NULLS OVER (ORDER BY column_a)
FROM #test_ignore_nulls
ORDER BY column_a;
--Identical output
SELECT column_a, column_b,
[Previous value for column_b] = LAG(column_b) OVER (ORDER BY column_a),
[Next value for column_b] = LEAD(column_b) OVER (ORDER BY column_a)
FROM #test_ignore_nulls
ORDER BY column_a;
--cleanup
DROP TABLE #test_ignore_nulls;
column_a column_b Previous value for column_b Next value for column_b
1 8 NULL 9
2 9 8 NULL
3 NULL 9 10
4 10 NULL NULL
5 NULL 10 NULL
6 NULL NULL 11
7 11 NULL NULL
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
A. Çeyrekler arasında değerleri karşılaştırın
Aşağıdaki örnek fonksiyonu LEAD göstermektedir. Sorgu, belirli bir çalışan için sonraki takvim çeyreklerinde satış kotası değerlerindeki farkı elde eder. Son satırdan sonra potansiyel müşteri değeri olmadığı için, varsayılan sıfır (0) kullanılır.
-- Uses AdventureWorks
SELECT CalendarYear AS Year,
CalendarQuarter AS Quarter,
SalesAmountQuota AS SalesQuota,
LEAD(SalesAmountQuota, 1, 0) OVER (ORDER BY CalendarYear, CalendarQuarter) AS NextQuota,
SalesAmountQuota - LEAD(SalesAmountQuota, 1, 0) OVER (ORDER BY CalendarYear, CalendarQuarter) AS Diff
FROM dbo.FactSalesQuota
WHERE EmployeeKey = 272 AND CalendarYear IN (2001, 2002)
ORDER BY CalendarYear, CalendarQuarter;
Sonuç kümesi aşağıdadır.
Year Quarter SalesQuota NextQuota Diff
---- ------- ---------- --------- -------------
2001 3 28000.0000 7000.0000 21000.0000
2001 4 7000.0000 91000.0000 -84000.0000
2001 1 91000.0000 140000.0000 -49000.0000
2002 2 140000.0000 7000.0000 7000.0000
2002 3 7000.0000 154000.0000 84000.0000
2002 4 154000.0000 0.0000 154000.0000