FirebirdSQL logo

LAG-Beispiele

Angenommen, Sie haben die Tabelle 'RATE', in der der Wechselkurs für jeden Tag gespeichert ist.Um die Änderung des Wechselkurses in den letzten fünf Tagen zu verfolgen, können Sie die folgende Abfrage verwenden.

select
  bydate,
  cost,
  cost - lag(cost) over (order by bydate) as change,
  100 * (cost - lag(cost) over (order by bydate)) /
    lag(cost) over (order by bydate) as percent_change
from rate
where bydate between dateadd(-4 day to current_date)
and current_date
order by bydate
Ergebnis
bydate     cost   change percent_change
---------- ------ ------ --------------
27.10.2014  31.00 <null>         <null>
28.10.2014  31.53   0.53         1.7096
29.10.2014  31.40  -0.13        -0.4123
30.10.2014  31.67   0.27         0.8598
31.10.2014  32.00   0.33         1.0419

LAST_VALUE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Das gleiche wie type wie expr

Syntax
LAST_VALUE ( <expr> ) OVER <window_name_or_spec>
Table 1. Argumente für LAST_VALUE
Argument Beschreibung

expr

Ausdruck.Kann eine Tabellenspalte, Konstante, Variable, Ausdruck, Skalarfunktion enthalten.Aggregatfunktionen sind als Ausdruck nicht zulässig.

Gibt den letzten Wert der aktuellen Partition zurück.

docnext count = 3

LEAD()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Das gleiche wie type wie expr

Syntax
LEAD ( <expr> [, <offset [, <default>]])
  OVER <window_name_or_spec>
Table 1. Argumente für LEAD
Argument Beschreibung

expr

Ausdruck.Kann eine Tabellenspalte, Konstante, Variable, Ausdruck, Skalarfunktion enthalten.Aggregatfunktionen sind als Ausdruck nicht zulässig.

offset

Der Offset in Zeilen nach der aktuellen Zeile, um den durch expr identifizierten Wert zu erhalten.Wenn offset nicht angegeben ist, ist der Standardwert 1.offset kann eine Spalte, eine Unterabfrage oder ein anderer Ausdruck sein, der zu einem positiven ganzzahligen Wert führt, oder ein anderer Typ, der implizit in BIGINT konvertiert werden kann.offset darf nicht negativ sein (verwenden Sie stattdessen LAG).

default

Der Standardwert, der zurückgegeben werden soll, wenn offset außerhalb der Partition zeigt.Der Standardwert ist NULL.

Die LEAD-Funktion ermöglicht den Zugriff auf die Zeile in der aktuellen Partition mit einem gegebenen Offset nach der aktuellen Zeile.

Wenn offset außerhalb der aktuellen Partition zeigt, wird default zurückgegeben, oder NULL, wenn kein Standard angegeben wurde.

NTH_VALUE()

Verfügbar in

DSQL, PSQL

Ergebnistyp

Das gleiche wie type wie expr

Syntax
NTH_VALUE ( <expr>, <offset> )
  [FROM {FIRST | LAST}]
  OVER <window_name_or_spec>
Table 1. Arguments of NTH_VALUE
Argument Beschreibung

expr

Ausdruck.Kann eine Tabellenspalte, Konstante, Variable, Ausdruck, Skalarfunktion enthalten.Aggregatfunktionen sind als Ausdruck nicht zulässig.

offset

Der Versatz in Zeilen vom Anfang (FROM FIRST) oder dem letzten (FROM LAST), um den durch expr identifizierten Wert zu erhalten.offset kann eine Spalte, eine Unterabfrage oder ein anderer Ausdruck sein, der zu einem positiven ganzzahligen Wert führt, oder ein anderer Typ, der implizit in BIGINT konvertiert werden kann.offset kann nicht null oder negativ sein.

Die Funktion NTH_VALUE gibt den Nten Wert ab der ersten (FROM FIRST) oder der letzten (FROM LAST) Zeile des aktuellen Frames zurück, siehe auch note on Rahmen für Navigationsfunktionen.Offset 1 mit FROM FIRST entspricht FIRST_VALUE und Offset 1 mit FROM LAST entspricht LAST_VALUE.

Aggregatfunktionen innerhalb der Window-Spezifikation

Es ist möglich, Aggregatfunktionen (aber keine Window-Funktionen) innerhalb der OVER-Klausel zu verwenden.In diesem Fall wird zuerst die Aggregatfunktion angewendet, um die Windows zu bestimmen, und erst dann werden die Window-Funktionen auf diese Window- angewendet.

Note

Bei Verwendung von Aggregatfunktionen innerhalb von OVER müssen alle Spalten, die nicht in Aggregatfunktionen verwendet werden, in der GROUP BY-Klausel von SELECT angegeben werden.

Verwenden einer Aggregatfunktion in einer Window-spezifikation
select
  code_employee_group,
  avg(salary) as avg_salary,
  rank() over (order by avg(salary)) as salary_rank
from employee
group by code_employee_group