FIRST_VALUE (Transact-SQL)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics Analytics yesPlatform System (PDW) YesAzure SQL Edge

Mengembalikan nilai pertama dalam sekumpulan nilai yang diurutkan.

Topic link iconKonvensi Sintaksis T-SQL

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

Lihat juga