Kategorien:

Fensterfunktionen (Rangbezogen, Fensterrahmen)

FIRST_VALUE

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

Siehe auch:

LAST_VALUE , NTH_VALUE

Syntax

FIRST_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:

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

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

  • Da FIRST_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. Wenn kein Fensterrahmen angegeben ist, ist der Standard das gesamte Fenster:

    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

    Beachten Sie, dass dies vom ANSI-Standard abweicht, der folgenden Standard 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,
    FIRST_VALUE(column2) OVER (PARTITION BY column1 ORDER BY column2) AS column2_first
FROM VALUES
   (1, 10), (1, 11), (1, null), (1, 12),
   (2, 20), (2, 21), (2, 22);

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