Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Die Fensterfunktion LEAD
Die Fensterfunktion LEAD gibt die Werte für eine Zeile in einem bestimmten Offset unterhalb (nach) der aktuellen Zeile in der Partition zurück.
Syntax
LEAD (value_expr [, offset ]) [ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
Argumente
- value_expr
-
Die Zielspalte oder der Ausdruck, für die/den die Funktion ausgeführt wird.
- offset
-
Ein optionaler Parameter, der die Anzahl der Zeilen unterhalb der aktuellen Zeile angibt, für die Werte zurückgegeben werden sollen. Beim Offset kann es sich um eine ganzzahlige Konstante oder um einen Ausdruck handeln, der zu einer Ganzzahl ausgewertet wird. Wenn Sie keinen Offset angeben, verwendet Amazon Redshift
1
als Standardwert. Ein Offset von0
gibt die aktuelle Zeile an. - IGNORE NULLS
-
Eine optionale Spezifikation, die angibt, dass Amazon Redshift bei der Festlegung der Zeile, die verwendet werden soll, Null-Werte überspringen soll. Wenn IGNORE NULLS nicht angegeben wird, werden Null-Werte berücksichtigt.
Anmerkung
Sie können einen NVL- oder COALESCE-Ausdruck verwenden, um die Null-Werte durch einen anderen Wert zu ersetzen. Weitere Informationen finden Sie unter NVL- und COALESCE-Funktionen.
- RESPECT NULLS
-
Gibt an, dass Amazon Redshift bei der Festlegung der Zeile, die verwendet werden soll, Null-Werte berücksichtigen soll. Wenn Sie IGNORE NULLS nicht angeben, wird RESPECT NULLS standardmäßig unterstützt.
- OVER
-
Gibt die Fensterpartitionierung und -anordnung an. Die OVER-Klausel darf keine Fensterrahmenspezifikation enthalten.
- PARTITION BY window_partition
-
Ein optionales Argument, das den Datensatzbereich für die einzelnen Gruppen in der OVER-Klausel festlegt.
- ORDER BY window_ordering
-
Sortiert die Zeilen innerhalb der einzelnen Partitionen.
Die Fensterfunktion LEAD unterstützt Ausdrücke, die einen der Amazon-Redshift-Datentypen verwenden. Der Rückgabetyp ist mit dem Typ von value_expr identisch.
Beispiele
Im folgenden Beispiel wird die Provision für Veranstaltungen in der Tabelle SALES angegeben, für die am 1. und 2. Januar 2008 Tickets verkauft wurden, sowie die Provision, die für verkaufte Tickets im anschließenden Verkauf gezahlt wurden. In diesem Beispiel wird die Musterdatenbank TICKIT verwendet. Weitere Informationen finden Sie unter Beispieldatenbank.
SELECT eventid, commission, saletime, LEAD(commission, 1) over ( ORDER BY saletime ) AS next_comm
FROM sales
WHERE saletime BETWEEN '2008-01-09 00:00:00' AND '2008-01-10 12:59:59'
LIMIT 10;
+---------+------------+---------------------+-----------+
| eventid | commission | saletime | next_comm |
+---------+------------+---------------------+-----------+
| 1664 | 13.2 | 2008-01-09 01:00:21 | 69.6 |
| 184 | 69.6 | 2008-01-09 01:00:36 | 116.1 |
| 6870 | 116.1 | 2008-01-09 01:02:37 | 11.1 |
| 3718 | 11.1 | 2008-01-09 01:05:19 | 205.5 |
| 6772 | 205.5 | 2008-01-09 01:14:04 | 38.4 |
| 3074 | 38.4 | 2008-01-09 01:26:50 | 209.4 |
| 5254 | 209.4 | 2008-01-09 01:29:16 | 26.4 |
| 3724 | 26.4 | 2008-01-09 01:40:09 | 57.6 |
| 5303 | 57.6 | 2008-01-09 01:40:21 | 51.6 |
| 3678 | 51.6 | 2008-01-09 01:42:54 | 43.8 |
+---------+------------+---------------------+-----------+
Das folgende Beispiel zeigt die maximale Differenz zwischen der Provision für Veranstaltungen in der Tabelle SALES für und der Provision, die für den Ticketverkauf für den nachfolgenden Verkauf derselben Veranstaltung gezahlt wurde. Dieses Beispiel zeigt, wie LEAD mit einer GROUP BY-Klausel verwendet wird. Da Fensterfunktionen in Aggregatklauseln nicht zulässig sind, verwendet dieses Beispiel eine Unterabfrage. In diesem Beispiel wird die Musterdatenbank TICKIT verwendet. Weitere Informationen finden Sie unter Beispieldatenbank.
SELECT eventid, eventname, max(next_comm_diff) as max_commission_difference
FROM
(
SELECT sales.eventid, eventname, commission - LEAD(commission, 1) over (ORDER BY sales.eventid, saletime) AS next_comm_diff
FROM sales JOIN event ON sales.eventid = event.eventid
)
GROUP BY eventid, eventname
ORDER BY eventid
LIMIT 10
| eventid | eventname | max_commission_difference |
+---------+-----------------------------+---------------------------+
| 1 | Gotterdammerung | 7.95 |
| 2 | Boris Godunov | 227.85 |
| 3 | Salome | 1350.9 |
| 4 | La Cenerentola (Cinderella) | 790.05 |
| 5 | Il Trovatore | 214.05 |
| 6 | L Elisir d Amore | 510.9 |
| 7 | Doctor Atomic | 180.6 |
| 9 | The Fly | 147 |
| 10 | Rigoletto | 186.6 |
+---------+-----------------------------+---------------------------+