FIRST_VALUE (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW) Titik akhir analitik Azure SQL Edge SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mengembalikan nilai pertama dalam sekumpulan nilai yang diurutkan.

Konvensi sintaks transact-SQL

Sintaksis

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 (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 arbitrer lainnya 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 pertama atas partisi.

RESPECT NULLS - Hormati nilai null dalam himpunan data saat menghitung nilai pertama 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 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 Klausul OVER (Transact-SQL).

Jenis yang dikembalikan

Jenis yang sama dengan scalar_expression.

Keterangan

FIRST_VALUE bersifat nondeterministik. Untuk informasi selengkapnya, lihat Fungsi deterministik dan nondeterministik.

Contoh

J. Menggunakan FIRST_VALUE atas kumpulan hasil kueri

Contoh berikut menggunakan FIRST_VALUE untuk mengembalikan nama produk yang paling murah dalam kategori produk tertentu.

USE AdventureWorks2022;
GO

SELECT Name,
    ListPrice,
    FIRST_VALUE(Name) OVER (
        ORDER BY ListPrice ASC
    ) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;

Berikut adalah hasil yang ditetapkan.

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. Klausul PARTITION BY mempartisi karyawan berdasarkan jabatan pekerjaan 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 AdventureWorks2022;
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 hasil yang ditetapkan.

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