Megosztás a következőn keresztül:


LAST_VALUE (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW) Azure SQL Edge SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Egy rendezett értékhalmaz utolsó értékét adja vissza.

Transact-SQL szintaxis konvenciói

Szintaxis

LAST_VALUE ( [ scalar_expression ] ) [ IGNORE NULLS | RESPECT NULLS ]
    OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

Érvek

scalar_expression

A visszaadandó érték. scalar_expression lehet egy oszlop, alquery vagy más kifejezés, amely egyetlen értéket eredményez. Más elemzési függvények nem engedélyezettek.

[ NULL ÉRTÉKEK FIGYELMEN KÍVÜL HAGYÁSA | RESPECT NULLS ] **

A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány és Azure SQL Edge

IGNORE NULLS – Figyelmen kívül hagyja az adathalmaz null értékeit, amikor az utolsó értéket egy partíción számítja ki.

RESPECT NULLS – Tartsa tiszteletben az adathalmaz null értékeit, amikor az utolsó értéket egy partíción számítja ki. RESPECT NULLS az alapértelmezett viselkedés, ha nincs megadva NULL ÉRTÉKŰ beállítás.

Az Azure SQL Edge argumentumával kapcsolatos további információkért lásd hiányzó értékekimputálása című témakört.

OVER ( [ partition_by_clause ] order_by_clause [ rows_range_clause ] )

A partition_by_clause a FROM záradék által létrehozott eredményhalmazt partíciókra osztja, amelyekre a függvényt alkalmazza. Ha nincs megadva, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli.

A order_by_clause határozza meg az adatok sorrendjét a függvény alkalmazása előtt. A order_by_clause szükséges.

A rows_range_clause a kezdő- és végpontok megadásával tovább korlátozza a partíció sorait.

További információ: OVER záradék (Transact-SQL).

Visszatérési típusok

Ugyanaz a típus, mint scalar_expression.

Megjegyzések

LAST_VALUE nemdeterminista. További információ: Determinisztikus és nem determinisztikus függvények.

Példák

Egy. LAST_VALUE használata partíciókon

Az alábbi példa az egyes részlegek utolsó alkalmazottjának munkabérét adja vissza az adott fizetéshez (Rate). A PARTITION BY záradék részlegek szerint particionálja az alkalmazottakat, és a LAST_VALUE függvényt egymástól függetlenül alkalmazza az egyes partíciókra. A ORDER BY záradékban megadott OVER záradék határozza meg a LAST_VALUE függvény alkalmazásának logikai sorrendjét az egyes partíciók soraiban.

USE AdventureWorks2022;
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');

Itt van az eredményhalmaz.

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

B. FIRST_VALUE és LAST_VALUE használata számított kifejezésben

Az alábbi példa a FIRST_VALUE és LAST_VALUE függvényeket használja a számított kifejezésekben, hogy az adott számú alkalmazott esetében az aktuális negyedév, illetve az év első és utolsó negyedéve értékesítési kvótájának értéke közötti különbséget mutassa. A FIRST_VALUE függvény az év első negyedévének értékesítési kvótáját adja vissza, és kivonja az aktuális negyedév értékesítési kvótájának értékéből. A DifferenceFromFirstQuarternevű származtatott oszlopot adja vissza. Az év első negyedévében a DifferenceFromFirstQuarter oszlop értéke 0. A LAST_VALUE függvény az év utolsó negyedévének értékesítési kvótáját adja vissza, és kivonja az aktuális negyedév értékesítési kvótájának értékéből. A DifferenceFromLastQuarternevű származtatott oszlopban tér vissza. Az év utolsó negyedévében a DifferenceFromLastQuarter oszlop értéke 0.

Ebben a példában a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING záradékra van szükség ahhoz, hogy a nem nulla értékek a DifferenceFromLastQuarter oszlopban legyenek visszaadva. Az alapértelmezett tartomány RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Ebben a példában az alapértelmezett tartomány (vagy a tartományt nem tartalmazó, az alapértelmezett használatot eredményező) használata nullákat eredményezne a DifferenceFromLastQuarter oszlopban. További információ: OVER záradék (Transact-SQL).

USE AdventureWorks2022;
GO

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;

Itt van az eredményhalmaz.

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