LAST_VALUE (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Titik akhir analitik Azure SQL Edge SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Mengembalikan nilai terakhir dalam sekumpulan nilai yang diurutkan.
Sintaksis
LAST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
scalar_expression
Nilai yang akan dikembalikan. scalar_expression bisa berupa kolom, subkueri, atau ekspresi lain yang menghasilkan satu nilai. Fungsi analitik lainnya tidak diizinkan.
[ ABAIKAN NULLS | HORMATI NULLS ] **
Berlaku untuk: SQL Server (dimulai dengan SQL Server 2022 (16.x)), Azure SQL Database, Azure SQL Managed Instance, Azure SQL Edge
IGNORE NULLS
- Abaikan nilai null dalam himpunan data saat menghitung nilai terakhir melalui partisi.
RESPECT NULLS
- Hormati nilai null dalam himpunan data saat menghitung nilai terakhir atas partisi. RESPECT NULLS
adalah perilaku default jika opsi NULLS tidak ditentukan.
Untuk informasi selengkapnya tentang argumen ini di Azure SQL Edge, lihat Menghambat nilai yang hilang.
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause membagi tataan hasil yang dihasilkan oleh klausul FROM menjadi partisi tempat fungsi diterapkan. Jika tidak ditentukan, fungsi memperlakukan semua baris hasil kueri yang ditetapkan sebagai grup tunggal.
order_by_clause menentukan urutan data sebelum fungsi diterapkan. Order_by_clause diperlukan.
rows_range_clause selanjutnya membatasi baris dalam partisi dengan menentukan titik awal dan akhir.
Untuk informasi selengkapnya, lihat Klausul OVER (Transact-SQL).
Jenis yang dikembalikan
Jenis yang sama dengan scalar_expression.
Keterangan
LAST_VALUE
bersifat nondeterministik. Untuk informasi selengkapnya, lihat Fungsi deterministik dan nondeterministik.
Contoh
J. Menggunakan LAST_VALUE melalui partisi
Contoh berikut mengembalikan tanggal perekrutan karyawan terakhir di setiap departemen untuk gaji yang diberikan (Rate
). Klausul PARTITION BY
mempartisi karyawan berdasarkan departemen dan LAST_VALUE
fungsi diterapkan ke setiap partisi secara independen. Klausa ORDER BY
yang ditentukan dalam OVER
klausul menentukan urutan logis di mana LAST_VALUE
fungsi diterapkan ke baris di setiap partisi.
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');
Berikut adalah hasil yang ditetapkan.
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. Menggunakan FIRST_VALUE dan LAST_VALUE dalam ekspresi komputasi
Contoh berikut menggunakan FIRST_VALUE
fungsi dan LAST_VALUE
dalam ekspresi komputasi untuk menunjukkan perbedaan antara nilai kuota penjualan untuk kuartal saat ini dan kuartal pertama dan terakhir dalam setahun masing-masing untuk sejumlah karyawan tertentu. Fungsi ini FIRST_VALUE
mengembalikan nilai kuota penjualan untuk kuartal pertama tahun ini, dan menguranginya dari nilai kuota penjualan untuk kuartal saat ini. Ini mengembalikan kolom turunan yang berjudul DifferenceFromFirstQuarter
. Untuk kuartal pertama setahun, nilai DifferenceFromFirstQuarter
kolom adalah 0. Fungsi ini LAST_VALUE
mengembalikan nilai kuota penjualan untuk kuartal terakhir tahun ini, dan menguranginya dari nilai kuota penjualan untuk kuartal saat ini. Ini mengembalikan dalam kolom turunan yang berjudul DifferenceFromLastQuarter
. Untuk seperempat tahun terakhir, nilai DifferenceFromLastQuarter
kolom adalah 0.
Klausa RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
diperlukan dalam contoh ini agar nilai bukan nol dikembalikan dalam DifferenceFromLastQuarter
kolom. Rentang defaultnya adalah RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. Dalam contoh ini, menggunakan rentang default tersebut (atau tidak termasuk rentang, yang mengakibatkan default digunakan) akan mengakibatkan nol dikembalikan di DifferenceFromLastQuarter
kolom. Untuk informasi selengkapnya, lihat Klausul OVER (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;
Berikut adalah hasil yang ditetapkan.
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
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk