- Kategorien:
Syntax und Verwendung von Fensterfunktionen (Rangliste)
LEAD¶
Greift auf Daten in einer nachfolgenden Zeile desselben Resultsets zu, ohne dass die Tabelle mit sich selbst verknüpft werden muss.
- Siehe auch:
Syntax¶
LEAD ( <expr> [ , <offset> , <default> ] ) [ { IGNORE | RESPECT } NULLS ]
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Argumente¶
exprDer Zeichenfolgenausdruck, der zurückgegeben werden soll.
offsetDie Anzahl der Zeilen vorwärts von der aktuellen Zeile, aus der ein Wert ermittelt werden soll. Beispielsweise gibt
offsetvon 2 den Wertexprmit einem Intervall von 2 Zeilen zurück.Das Einrichten eines negativen Offsets hat dieselbe Wirkung wie die Verwendung der Funktion LAG.
Der Standardwert ist 1. Wenn
IGNORE NULLSangegeben ist, beträgt das Maximum 1.000.000.defaultDer Ausdruck, der zurückgegeben wird, wenn der Offset die Grenzen des Fensters überschreitet. Unterstützt jeden Ausdruck, dessen Typ mit
exprkompatibel ist.Der Standardwert ist NULL.
{ IGNORE | RESPECT } NULLSOb die NULL-Werte ignoriert oder beachtet werden sollen, wenn
exprNULL-Werte enthält:IGNORE NULLSschließt jede Zeile aus, deren Ausdruck bei der Zählung der Offset-Zeilen den Wert NULL ergibt.RESPECT NULLSenthält jede Zeile, deren Ausdruck bei der Zählung der Offset-Zeilen den Wert NULL ergibt.
Standard:
RESPECT NULLS
Nutzungshinweise¶
Die PARTITIONBY-Klausel unterteilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die Funktion angewendet wird. Weitere Informationen dazu finden Sie unter Syntax und Verwendung von Fensterfunktionen.
Die ORDERBY-Klausel ordnet die Daten in einzelne Partitionen an.
Beispiele¶
CREATE OR REPLACE TABLE sales(
emp_id INTEGER,
year INTEGER,
revenue DECIMAL(10,2));
INSERT INTO sales VALUES
(0, 2010, 1000),
(0, 2011, 1500),
(0, 2012, 500),
(0, 2013, 750);
INSERT INTO sales VALUES
(1, 2010, 10000),
(1, 2011, 12500),
(1, 2012, 15000),
(1, 2013, 20000);
INSERT INTO sales VALUES
(2, 2012, 500),
(2, 2013, 800);
SELECT emp_id,
year,
revenue,
LEAD(revenue) OVER (PARTITION BY emp_id ORDER BY year) - revenue AS diff_to_next
FROM sales
ORDER BY emp_id, year;
+--------+------+----------+--------------+
| EMP_ID | YEAR | REVENUE | DIFF_TO_NEXT |
|--------+------+----------+--------------|
| 0 | 2010 | 1000.00 | 500.00 |
| 0 | 2011 | 1500.00 | -1000.00 |
| 0 | 2012 | 500.00 | 250.00 |
| 0 | 2013 | 750.00 | NULL |
| 1 | 2010 | 10000.00 | 2500.00 |
| 1 | 2011 | 12500.00 | 2500.00 |
| 1 | 2012 | 15000.00 | 5000.00 |
| 1 | 2013 | 20000.00 | NULL |
| 2 | 2012 | 500.00 | 300.00 |
| 2 | 2013 | 800.00 | NULL |
+--------+------+----------+--------------+
CREATE OR REPLACE TABLE t1 (
c1 NUMBER,
c2 NUMBER);
INSERT INTO t1 VALUES
(1,5),
(2,4),
(3,NULL),
(4,2),
(5,NULL),
(6,NULL),
(7,6);
SELECT c1,
c2,
LEAD(c2) IGNORE NULLS OVER (ORDER BY c1)
FROM t1;
+----+------+------------------------------------------+
| C1 | C2 | LEAD(C2) IGNORE NULLS OVER (ORDER BY C1) |
|----+------+------------------------------------------|
| 1 | 5 | 4 |
| 2 | 4 | 2 |
| 3 | NULL | 2 |
| 4 | 2 | 6 |
| 5 | NULL | 6 |
| 6 | NULL | 6 |
| 7 | 6 | NULL |
+----+------+------------------------------------------+