블로그 이미지
정홍주
Azure에 대한 내용뿐만 아니라 새로운 트렌드로 빅데이터, BI, SharePoint, 앱 등의 내용을 다룹니다.

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

'LAST_VALUE'에 해당되는 글 1

  1. 2012.05.16 SQL Server 2012 T-SQL New Feature – FIRST_VALUE, LAST_VALUE
2012.05.16 08:30 SQL

SQL Server 2012 T-SQL New Feature – FIRST_VALUE, LAST_VALUE

 

SQL Server 2012에서 새롭게 제공되는 분석 함수 중에서 LAG, LEAD에 대한 내용을 살펴보았는데 이번에는 정렬된 값 집합의 첫번째 값과 마지막 값을 반환하는 함수를 알아보겠습니다.

FIRST_VALUE, LAST_VALUE 함수를 사용하면 어떤 시나리오에서는 손쉽게 원하는 결과를 구할 수 있을 것 같습니다.

 

먼저 FIRST_VALUE의 구문은 아래와 같습니다.

FIRST_VALUE ( [scalar_expression )

    OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

간단한 예를 보는 것이 이해하기 훨씬 나을 듯 합니다. 아래 쿼리의 결과를 보시면 제품이름과 카테고리, 가격이 나타납니다.

SELECT Name,  [ProductSubcategoryID], [ListPrice]

FROM [Production].[Product]

WHERE [ProductSubcategoryID] IS NOT NULL

ORDER BY [ProductSubcategoryID], [ListPrice] 

 

 

추가로 위의 결과에 가장 낮은 가격과 가장 높은 가격을 나타내려면 서브 쿼리로 MAX, MIN을 사용할 수 있을 것입니다. 정렬된 결과 집합에 대한 최소가격의 경우 쿼리가 조인되고 필터 조건이 복잡하다면 쿼리 문이 복잡해지게 됩니다. FIRST_VALUE를 이용해서 가장 낮은 가격을 구하는 내용을 추가해보도록 하겠습니다.

SELECT Name,  [ProductSubcategoryID], [ListPrice]

, FIRST_VALUE( [ListPrice]) OVER (ORDER BY ListPrice ASC)

FROM [Production].[Product]

WHERE [ProductSubcategoryID] IS NOT NULL

ORDER BY [ProductSubcategoryID], [ListPrice] 

 

 

FIRST_VALUE 구문에서도 보는 것처럼 FIRST_VALUE 다음에 나타낼 값에 대한 열을 사용하고 OVER 구문에서 ORDER BY, PARTITION BY 를 사용할 수 있습니다. 아래는 카테고리별 분할된 내용에 대한 최소 가격과 최대 가격을 나타내는 구문입니다.

SELECT Name,  [ProductSubcategoryID],[ListPrice]

, FIRST_VALUE( [ListPrice]) OVER (PARTITION BY [ProductSubcategoryID] ORDER BY [ProductSubcategoryID] ) AS FirstValue

, LAST_VALUE( [ListPrice]) OVER (PARTITION BY [ProductSubcategoryID] ORDER BY [ProductSubcategoryID] ) AS LastValue

FROM [Production].[Product]

WHERE [ProductSubcategoryID] IS NOT NULL

ORDER BY [ProductSubcategoryID], [ListPrice] 

 

 

간략히 분석 함수 중에서 FIRST_VALUE, LAST_VALUE를 살펴보았습니다. 서브 쿼리로도 해결 가능하겠지만 특정 시나리오에서는 FIRST_VALUE, LAST_VALUE를 통해 간결하고 손쉽게 해결할 수 있습니다. 보다 더 자세한 내용은 아래 링크를 참고하실 수 있습니다. 

l  FIRST_VALUE(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/hh213018

l  LAST_VALUE(Transact-SQL)

http://msdn.microsoft.com/ko-kr/library/hh231517

 

 

신고
posted by 정홍주
prev 1 next