FIRST_VALUE(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Azure SQL Edge SQL 분석 엔드포인트
정렬된 값 세트의 첫 번째 값을 반환합니다.
구문
FIRST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
인수
scalar_expression
반환되는 값입니다. scalar_expression은 열, 하위 쿼리 또는 결과로 반환되는 값이 하나뿐인 임의의 다른 식일 수 있습니다. 다른 분석 함수는 사용할 수 없습니다.
[ IGNORE NULLS | RESPECT NULLS ]
적용 대상: SQL Server(SQL Server 2022(16.x) 부터), Azure SQL Database, Azure SQL Managed Instance, Azure SQL Edge
IGNORE NULLS
- 파티션을 통해 첫 번째 값을 계산할 때 데이터 세트의 null 값을 무시합니다.
RESPECT NULLS
- 파티션을 통해 첫 번째 값을 계산할 때 데이터 세트의 null 값을 준수합니다. RESPECT NULLS
은 NULLS 옵션을 지정하지 않은 경우의 기본 동작입니다.
Azure SQL Edge에서 이 인수에 대한 자세한 내용은 누락된 값의 대체를 참조 하세요.
OVER( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause는 FROM 절이 생성한 결과 집합을 함수가 적용되는 파티션으로 나눕니다. 지정하지 않을 경우 쿼리 결과 집합의 모든 행이 단일 그룹으로 취급됩니다.
order_by_clause는 작업이 수행되는 논리적 순서를 결정합니다. order_by_clause가 필요합니다.
rows_range_clause는 시작점 및 끝점을 지정하여 파티션 내에서 행을 추가로 제한합니다.
자세한 내용은 OVER 절(Transact-SQL)을 참조하세요.
반환 형식
scalar_expression과 같은 유형입니다.
설명
FIRST_VALUE
는 비결정적입니다. 자세한 내용은 결정적 함수와 비결정적 함수를 참조하세요.
예제
A. 쿼리 결과 집합에 FIRST_VALUE 사용
다음 예에서는 FIRST_VALUE
를 사용하여 지정된 제품 범주에서 가격이 가장 저렴한 제품의 이름을 반환합니다.
USE AdventureWorks2022;
GO
SELECT Name,
ListPrice,
FIRST_VALUE(Name) OVER (
ORDER BY ListPrice ASC
) AS LeastExpensive
FROM Production.Product
WHERE ProductSubcategoryID = 37;
결과 집합은 다음과 같습니다.
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. 파티션에 FIRST_VALUE 사용
다음 예에서는 FIRST_VALUE
를 사용하여 직함이 같은 다른 직원과 비교해 휴가 일수가 가장 적은 직원을 반환합니다. PARTITION BY
절은 직원을 직함별로 분할하며 FIRST_VALUE
함수는 각 파티션에 개별적으로 적용됩니다. OVER
절에 지정된 ORDER BY
절은 FIRST_VALUE
함수가 각 파티션의 행에 적용되는 논리적 순서를 결정합니다. ROWS UNBOUNDED PRECEDING
절은 창 시작점을 각 파티션의 첫 번째 행으로 지정합니다.
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;
결과 집합은 다음과 같습니다.
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