Kategorien:

Fensterfunktionen (Rangbezogen, Fensterrahmen)

LAST_VALUE

Gibt den letzten Wert innerhalb einer geordneten Gruppe von Werten zurück.

Siehe auch:

FIRST_VALUE , NTH_VALUE

Syntax

LAST_VALUE( <expr> ) [ { IGNORE | RESPECT } NULLS ]
                     OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <window_frame> ] )

Weitere Informationen zur Syntax von Fensterrahmen finden Sie unter Fensterrahmensyntax und Verwendung.

Nutzungshinweise

  • Aus Gründen der Kompatibilität mit Implementierungen dieser Funktion in anderen Systemen kann { IGNORE | RESPECT } NULLS auch in den Argumenten der folgenden Funktion angegeben werden:

    LAST_VALUE( <Ausdruck> [ { IGNORE | RESPECT } NULLS ] ) OVER ...

  • Wenn { IGNORE | RESPECT } NULLS nicht angegeben ist, lautet der Standardwert RESPECT NULLS, d. h. ein NULL-Wert wird zurückgegeben, wenn der Ausdruck einen NULL-Wert enthält und es sich dabei um den letzten Wert im Ausdruck handelt.

  • Da LAST_VALUE eine Analysefunktion ist, muss ein Fenster angegeben werden, das aus folgenden Elementen besteht:

    • Unterklausel PARTITION BY <Ausdruck1> (optional)

    • Unterklausel ORDER BY <Ausdruck2> (erforderlich) mit einem optionalen Fensterrahmen Weitere Informationen zu zusätzlichen unterstützten Sortieroptionen (Sortierreihenfolge, Sortieren von NULL-Werten usw.) finden Sie im Abfragekonstrukt ORDER BY.

  • Der optionale Fensterrahmen (kumulativ oder gleitend) gibt die Teilmenge der Zeilen innerhalb des Fensters an, für die die Funktion berechnet wird.

    • Für Fensterrahmen unterstützt diese Funktion nur ROWS-basierte Fensterrahmen, nicht RANGE-basierte Fensterrahmen.

      Unterstützt

      ROWS BETWEEN ... AND ...

      Nicht unterstützt

      RANGE BETWEEN ... AND ...

    • Wenn kein Fensterrahmen angegeben ist, ist der Standard das gesamte Fenster:

      ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

      Dies unterscheidet sich vom ANSI-Standard, der Folgendes für Fensterrahmen vorgibt:

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    Weitere Informationen zu Fensterrahmen, einschließlich Syntax und Beispielen, finden Sie unter Fensterrahmensyntax und Verwendung.

Beispiele

SELECT
    column1,
    column2,
    LAST_VALUE(column2) OVER (PARTITION BY column1 ORDER BY column2) AS column2_last
FROM VALUES
    (1, 10), (1, 11), (1, 12),
    (2, 20), (2, 21), (2, 22);

+---------+---------+--------------+
| COLUMN1 | COLUMN2 | COLUMN2_LAST |
|---------+---------+--------------|
|       1 |      10 |           12 |
|       1 |      11 |           12 |
|       1 |      12 |           12 |
|       2 |      20 |           22 |
|       2 |      21 |           22 |
|       2 |      22 |           22 |
+---------+---------+--------------+