- Kategorien:
Fensterfunktionen (Rangbezogen)
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¶
Ausdruck
Der Zeichenfolgenausdruck, der zurückgegeben werden soll.
Offset
Die Anzahl der Zeilen vorwärts von der aktuellen Zeile, aus der ein Wert abgerufen werden soll. Beispielsweise gibt ein
Offset
von 2 den WertAusdruck
mit 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 NULLS
angegeben ist, beträgt das Maximum 1.000.000.Standard
Der Ausdruck, der zurückgegeben wird, wenn der Offset die Grenzen des Fensters überschreitet. Unterstützt jeden Ausdruck, dessen Typ mit
Ausdruck
kompatibel ist.Der Standardwert ist NULL.
Nutzungshinweise¶
Wenn die IGNORE NULLS-Klausel angegeben ist, werden alle Zeilen, deren Ausdruck NULL ergibt, beim Zählen von Offsetzeilen nicht berücksichtigt. Wenn
{ IGNORE | RESPECT } NULLS
nicht angegeben ist, lautet der StandardwertRESPECT NULLS
.Die
PARTITION BY
-Klausel partitioniert das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die Funktion angewendet wird. Weitere Informationen dazu und zurORDER BY
-Klausel finden Sie unter Fensterfunktionen.Die
ORDER BY
-Klausel ordnet die Daten in den einzelnen 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 |
+----+------+------------------------------------------+