FIRST_VALUE (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
Azure SQL Edge
Mengembalikan nilai pertama dalam sekumpulan nilai yang diurutkan.
Sintaks
FIRST_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 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
scalar_expression
Nilai yang akan dikembalikan. scalar_expression bisa berupa kolom, subkueri, atau ekspresi arbitrer lainnya yang menghasilkan satu nilai. Fungsi analitik lainnya tidak diizinkan.
[ ABAIKAN NULLS | HORMATI NULLS ]
Berlaku untuk: Pratinjau SQL Server (dimulai dengan SQL Server 2022 (16.x), Azure SQL Edge
IGNORE NULLS - Abaikan nilai null dalam himpunan data saat menghitung nilai pertama melalui partisi.
RESPECT NULLS - Menghormati nilai null dalam himpunan data saat menghitung nilai pertama melalui partisi.
Untuk informasi selengkapnya, lihat Mengintegrasikan nilai yang hilang.
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause membagi tataan hasil yang dihasilkan oleh klausa 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 logis tempat operasi dilakukan. Order_by_clause diperlukan.
rows_range_clause selanjutnya membatasi baris dalam partisi dengan menentukan titik awal dan akhir.
Untuk informasi selengkapnya, lihat Klausa OVER (Transact-SQL).
Tipe yang dikembalikan
Jenis yang sama dengan scalar_expression.
Keterangan
FIRST_VALUE bersifat nondeterministik. Untuk informasi selengkapnya, lihat Fungsi Deterministik dan Nondeterministik.
Contoh
A. Menggunakan FIRST_VALUE atas kumpulan hasil kueri
Contoh berikut menggunakan FIRST_VALUE untuk mengembalikan nama produk yang paling murah dalam kategori produk tertentu.
USE AdventureWorks2012;
GO
SELECT Name, ListPrice,
FIRST_VALUE(Name) OVER (ORDER BY ListPrice ASC) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
Berikut set hasilnya.
Name ListPrice LeastExpensive
----------------------- --------------------- --------------------
Patch Kit/8 Patches 2.29 Patch Kit/8 Patches
Road Tire Tube 3.99 Patch Kit/8 Patches
Touring Tire Tube 4.99 Patch Kit/8 Patches
Mountain Tire Tube 4.99 Patch Kit/8 Patches
LL Road Tire 21.49 Patch Kit/8 Patches
ML Road Tire 24.99 Patch Kit/8 Patches
LL Mountain Tire 24.99 Patch Kit/8 Patches
Touring Tire 28.99 Patch Kit/8 Patches
ML Mountain Tire 29.99 Patch Kit/8 Patches
HL Road Tire 32.60 Patch Kit/8 Patches
HL Mountain Tire 35.00 Patch Kit/8 Patches
B. Menggunakan FIRST_VALUE atas partisi
Contoh berikut menggunakan FIRST_VALUE untuk mengembalikan karyawan dengan jumlah jam liburan terkecil dibandingkan dengan karyawan lain dengan jabatan yang sama. Klausa mempartisi PARTITION BY karyawan berdasarkan jabatan dan FIRST_VALUE fungsi diterapkan ke setiap partisi secara independen. Klausa ORDER BY yang ditentukan dalam OVER klausul menentukan urutan logis di mana FIRST_VALUE fungsi diterapkan ke baris di setiap partisi. Klausa ROWS UNBOUNDED PRECEDING menentukan titik awal jendela adalah baris pertama dari setiap partisi.
USE AdventureWorks2012;
GO
SELECT JobTitle, LastName, VacationHours,
FIRST_VALUE(LastName) OVER (PARTITION BY JobTitle
ORDER BY VacationHours ASC
ROWS UNBOUNDED PRECEDING
) AS FewestVacationHours
FROM HumanResources.Employee AS e
INNER JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID
ORDER BY JobTitle;
Berikut adalah tataan hasil parsial.
JobTitle LastName VacationHours FewestVacationHours
----------------------------------- ------------------------- ------------- -------------------
Accountant Moreland 58 Moreland
Accountant Seamans 59 Moreland
Accounts Manager Liu 57 Liu
Accounts Payable Specialist Tomic 63 Tomic
Accounts Payable Specialist Sheperdigian 64 Tomic
Accounts Receivable Specialist Poe 60 Poe
Accounts Receivable Specialist Spoon 61 Poe
Accounts Receivable Specialist Walton 62 Poe
