LAG-Funktion Oracle/PLSQL

In diesem Oracle-Lernprogramm wird erläutert, wie Sie die Oracle/PLSQL LAG-Funktion mit Syntax und Beispielen verwenden.

Beschreibung

Die Oracle/PLSQL LAG-Funktion ist eine Analysefunktion, mit der Sie mehr als eine Zeile in einer Tabelle gleichzeitig abfragen können, ohne die Tabelle mit sich selbst verknüpfen zu müssen. Es gibt Werte aus einer vorherigen Zeile in der Tabelle zurück. Um einen Wert aus der nächsten Zeile zurückzugeben, versuchen Sie es mit der LEAD-Funktion.

Syntax

Die Syntax für die LAG-Funktion in Oracle/PLSQL lautet:

LAG ( expression [, offset [, default] ] ) over ( [ query_partition_clause ] order_by_clause )

Parameter oder Argumente

expression Ein Ausdruck, der andere integrierte Funktionen enthalten kann, aber keine analytischen Funktionen enthalten kann.

offset Wahlweise. Es ist der physikalische Offset von der aktuellen Zeile in der Tabelle. Wenn dieser Parameter nicht angegeben wird, ist der Standardwert 1.

default Wahlweise. Es ist der Wert, der zurückgegeben wird, wenn der Offset außerhalb der Grenzen der Tabelle liegt. Wenn dieser Parameter nicht angegeben wird, ist der Standardwert null.

offset Wahlweise. Es wird verwendet, um die Ergebnisse basierend auf einem oder mehreren Ausdrücken in Gruppen zu partitionieren.

order_by_clause Wahlweise. Es wird verwendet, um die Daten in jeder Partition zu ordnen.

Kehrt zurück

  • Die LAG-Funktion gibt Werte aus einer vorherigen Zeile in der Tabelle zurück.

Gilt für

Die LAG-Funktion kann in folgenden Versionen von Oracle/PLSQL verwendet werden:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Beispiel

Die LAG-Funktion kann in Oracle/PLSQL verwendet werden.

Schauen wir uns ein Beispiel an. Wenn wir eine Bestellungstabelle hätten, die folgende Daten enthält:

ORDER_DATE PRODUCT_ID QTY
25/09/2007 1000 20
26/09/2007 2000 15
27/09/2007 1000 8
28/09/2007 2000 12
29/09/2007 2000 2
30/09/2007 1000 4

Und wir haben die folgende SQL-Anweisung ausgeführt:

Es würde das folgende Ergebnis zurückgeben:

ORDER_DATE PRODUCT_ID QTY
1000 25/09/2007
2000 26/09/2007 25/09/2007
1000 27/09/2007 26/09/2007
2000 28/09/2007 27/09/2007
2000 29/09/2007 28/09/2007
1000 30/09/2007 29/09/2007

In diesem Beispiel sortiert die LAG-Funktion aufsteigend alle order_date Werte in der Auftragstabelle und gibt dann das vorherige order_date zurück, da wir einen Offset von 1 verwendet haben.

Wenn wir stattdessen einen Offset von 2 verwendet hätten, hätte es das order_date von 2 Bestellungen früher zurückgegeben. Wenn wir einen Offset von 3 verwendet hätten, hätte es das order_date von 3 Bestellungen früher zurückgegeben …. und so weiter.

Verwenden von Partitionen

Sehen wir uns nun ein komplexeres Beispiel an, in dem wir eine Abfragepartitionsklausel verwenden, um das vorherige order_date für jede product_id zurückzugeben.

Geben Sie die folgende SQL-Anweisung ein:

Es würde das folgende Ergebnis zurückgeben:

ORDER_DATE PRODUCT_ID QTY
2000 26/09/2007
2000 28/09/2007 26/09/2007
2000 29/09/2007 28/09/2007

In diesem Beispiel wird die LAG-Funktion die Ergebnisse nach product_id partitionieren und dann nach order_date sortieren, wie in PARTITION BY product_id ORDER BY order_date Bestelldatum. Dies bedeutet, dass die LAG-Funktion nur einen Wert order_date auswertet, wenn product_id mit dem aktuellen Datensatz übereinstimmt. produkt-ID Wenn eine neue product_id gefunden wird, startet die LAG-Funktion ihre Berechnungen neu und verwendet die entsprechende Partition product_id.

Wie Sie sehen können, hat der erste Datensatz in der Ergebnismenge einen Wert von NULL für prev_order_date, da es der erste Datensatz für die Partition ist, für den product_id ist 1000 (sortiert nach order_date), daher gibt es keinen niedrigeren Wert order_date. Dies gilt auch für den vierten Datensatz, in dem product_id 2000 ist.