LAST_VALUE(Transact-SQL)LAST_VALUE (Transact-SQL)

적용 대상: 예SQL Server(2012부터) 예Azure SQL Database 예Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server (starting with 2012) yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2017SQL Server 2017에서 정렬된 값 집합의 마지막 값을 반환합니다.Returns the last value in an ordered set of values in SQL Server 2017SQL Server 2017.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax


LAST_VALUE ( [ scalar_expression ] )   
    OVER ( [ partition_by_clause ] order_by_clause rows_range_clause )   

인수Arguments

scalar_expressionscalar_expression
반환할 값입니다.Is the value to be returned. scalar_expression은 열, 하위 쿼리 또는 결과로 반환되는 값이 하나뿐인 다른 식일 수 있습니다.scalar_expression can be a column, subquery, or other expression that results in a single value. 다른 분석 함수는 사용할 수 없습니다.Other analytic functions are not permitted.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )
partition_by_clause는 FROM 절이 생성한 결과 집합을 함수가 적용되는 파티션으로 나눕니다.partition_by_clause divides the result set produced by the FROM clause into partitions to which the function is applied. 지정하지 않을 경우 쿼리 결과 집합의 모든 행이 단일 그룹으로 취급됩니다.If not specified, the function treats all rows of the query result set as a single group.

order_by_clause는 함수를 적용하기 전에 데이터의 순서를 결정합니다.order_by_clause determines the order of the data before the function is applied. order_by_clause가 필요합니다.The order_by_clause is required. rows_range_clause는 시작점 및 끝점을 지정하여 파티션 내에서 행을 추가로 제한합니다.rows_range_clause further limits the rows within the partition by specifying start and end points. 자세한 내용은 OVER 절(Transact-SQL)을 참조하세요.For more information, see OVER Clause (Transact-SQL).

반환 형식Return Types

scalar_expression과 같은 유형입니다.Is the same type as scalar_expression.

일반적인 주의 사항General Remarks

LAST_VALUE는 비결정적입니다.LAST_VALUE is nondeterministic. 자세한 내용은 Deterministic and Nondeterministic Functions을 참조하세요.For more information, see Deterministic and Nondeterministic Functions.

Examples

1.A. 파티션에 LAST_VALUE 사용Using LAST_VALUE over partitions

다음 예에서는 지정된 급여(Rate)에 대해 각 부서에서 마지막으로 입사한 직원의 고용 날짜를 반환합니다.The following example returns the hire date of the last employee in each department for the given salary (Rate). PARTITION BY 절은 직원을 부서별로 분할하며 LAST_VALUE 함수는 각 파티션에 개별적으로 적용됩니다.The PARTITION BY clause partitions the employees by department and the LAST_VALUE function is applied to each partition independently. OVER 절에 지정된 ORDER BY 절은 LAST_VALUE 함수가 각 파티션의 행에 적용되는 논리적 순서를 결정합니다.The ORDER BY clause specified in the OVER clause determines the logical order in which the LAST_VALUE function is applied to the rows in each partition.

USE AdventureWorks2012;  
GO  
SELECT Department, LastName, Rate, HireDate,   
    LAST_VALUE(HireDate) OVER (PARTITION BY Department ORDER BY Rate) AS LastValue  
FROM HumanResources.vEmployeeDepartmentHistory AS edh  
INNER JOIN HumanResources.EmployeePayHistory AS eph    
    ON eph.BusinessEntityID = edh.BusinessEntityID  
INNER JOIN HumanResources.Employee AS e  
    ON e.BusinessEntityID = edh.BusinessEntityID  
WHERE Department IN (N'Information Services',N'Document Control');  

결과 집합은 다음과 같습니다.Here is the result set.


Department                  LastName                Rate         HireDate     LastValue  
--------------------------- ----------------------- ------------ ----------   ----------  
Document Control            Chai                    10.25        2003-02-23   2003-03-13  
Document Control            Berge                   10.25        2003-03-13   2003-03-13  
Document Control            Norred                  16.8269      2003-04-07   2003-01-17  
Document Control            Kharatishvili           16.8269      2003-01-17   2003-01-17  
Document Control            Arifin                  17.7885      2003-02-05   2003-02-05  
Information Services        Berg                    27.4038      2003-03-20   2003-01-24  
Information Services        Meyyappan               27.4038      2003-03-07   2003-01-24  
Information Services        Bacon                   27.4038      2003-02-12   2003-01-24  
Information Services        Bueno                   27.4038      2003-01-24   2003-01-24  
Information Services        Sharma                  32.4519      2003-01-05   2003-03-27  
Information Services        Connelly                32.4519      2003-03-27   2003-03-27  
Information Services        Ajenstat                38.4615      2003-02-18   2003-02-23  
Information Services        Wilson                  38.4615      2003-02-23   2003-02-23  
Information Services        Conroy                  39.6635      2003-03-08   2003-03-08  
Information Services        Trenary                 50.4808      2003-01-12   2003-01-12  

2.B. 계산된 식에서 FIRST_VALUE 및 LAST_VALUE 사용Using FIRST_VALUE and LAST_VALUE in a computed expression

다음 예에서는 계산된 식에서 FIRST_VALUE 및 LAST_VALUE 함수를 사용하여 지정된 직원들의 해당 연도 현재 분기 및 첫 분기와 마지막 분기의 분기별 판매 할당량 값의 차이를 각각 표시합니다.The following example uses the FIRST_VALUE and LAST_VALUE functions in computed expressions to show the difference between the sales quota value for the current quarter and the first and last quarter of the year respectively for a given number of employees. FIRST_VALUE 함수는 해당 연도의 첫 분기의 판매 할당량 값을 반환하고 현재 분기의 판매 할당량 값에서 이 값을 뺍니다.The FIRST_VALUE function returns the sales quota value for the first quarter of the year, and subtracts it from the sales quota value for the current quarter. 값은 DifferenceFromFirstQuarter라는 파생 열에 반환됩니다.It is returned in the derived column entitled DifferenceFromFirstQuarter. 해당 연도의 첫 번째 분기인 경우 DifferenceFromFirstQuarter 열의 값은 0입니다.For the first quarter of a year, the value of the DifferenceFromFirstQuarter column is 0. LAST_VALUE 함수는 해당 연도의 마지막 분기에 대한 판매 할당량 값을 반환하고, 현재 분기의 판매 할당량 값에서 이 값을 뺍니다.The LAST_VALUE function returns the sales quota value for the last quarter of the year, and subtracts it from the sales quota value for the current quarter. 값은 DifferenceFromLastQuarter라는 파생 열에 반환됩니다.It is returned in the derived column entitled DifferenceFromLastQuarter. 연도의 마지막 분기의 경우 DifferenceFromLastQuarter 열의 값은 0입니다.For the last quarter of a year, the value of the DifferenceFromLastQuarter column is 0.

아래와 같이 이 예에서는 DifferenceFromLastQuarter 열에 0이 아닌 값이 반환되도록 하기 위해서는 “RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING” 절이 필요합니다.The clause “RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING” is required in this example for the non-zero values to be returned in the DifferenceFromLastQuarter column, as shown below. 기본 범위는 “RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”입니다.The default range is “RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”. 이 예에서는 기본 범위를 사용하여(또는 범위를 포함하지 않아 기본값이 사용되도록 함) DifferenceFromLastQuarter 열에 0이 반환됩니다.In this example, using that default range (or not including a range, resulting in the default being used) would result in zeroes being returned in the DifferenceFromLastQuarter column. 자세한 내용은 OVER 절(Transact-SQL)을 참조하세요.For more information, see OVER Clause (Transact-SQL).

USE AdventureWorks2012;  
SELECT BusinessEntityID, DATEPART(QUARTER,QuotaDate)AS Quarter, YEAR(QuotaDate) AS SalesYear,   
    SalesQuota AS QuotaThisQuarter,   
    SalesQuota - FIRST_VALUE(SalesQuota)   
        OVER (PARTITION BY BusinessEntityID, YEAR(QuotaDate)   
              ORDER BY DATEPART(QUARTER,QuotaDate) ) AS DifferenceFromFirstQuarter,   
    SalesQuota - LAST_VALUE(SalesQuota)   
        OVER (PARTITION BY BusinessEntityID, YEAR(QuotaDate)   
              ORDER BY DATEPART(QUARTER,QuotaDate)   
              RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS DifferenceFromLastQuarter   
FROM Sales.SalesPersonQuotaHistory   
WHERE YEAR(QuotaDate) > 2005   
AND BusinessEntityID BETWEEN 274 AND 275   
ORDER BY BusinessEntityID, SalesYear, Quarter;  

결과 집합은 다음과 같습니다.Here is the result set.

BusinessEntityID Quarter     SalesYear   QuotaThisQuarter      DifferenceFromFirstQuarter DifferenceFromLastQuarter  
---------------- ----------- ----------- --------------------- --------------------------- -----------------------  
274              1           2006        91000.00              0.00                        -63000.00  
274              2           2006        140000.00             49000.00                    -14000.00  
274              3           2006        70000.00              -21000.00                   -84000.00  
274              4           2006        154000.00             63000.00                    0.00  
274              1           2007        107000.00             0.00                        -9000.00  
274              2           2007        58000.00              -49000.00                   -58000.00  
274              3           2007        263000.00             156000.00                   147000.00  
274              4           2007        116000.00             9000.00                     0.00  
274              1           2008        84000.00              0.00                        -103000.00  
274              2           2008        187000.00             103000.00                   0.00  
275              1           2006        502000.00             0.00                        -822000.00  
275              2           2006        550000.00             48000.00                    -774000.00  
275              3           2006        1429000.00            927000.00                   105000.00  
275              4           2006        1324000.00            822000.00                   0.00  
275              1           2007        729000.00             0.00                        -489000.00  
275              2           2007        1194000.00            465000.00                   -24000.00  
275              3           2007        1575000.00            846000.00                   357000.00  
275              4           2007        1218000.00            489000.00                   0.00  
275              1           2008        849000.00             0.00                        -20000.00  
275              2           2008        869000.00             20000.00                    0.00  

(20 row(s) affected)