SQL Server LAG -Funktion

SQL Server LAG -Funktion

Die LAG -Funktion in SQL Server ist eine Windows -Funktion, die in SQL Server 2012 eingeführt wird. Mit dieser Funktion können Sie die Daten früherer Zeilen gemäß dem angegebenen Offset -Wert abrufen. Stellen Sie sich die LAG -Funktion als die Möglichkeit vor, aus früheren Zeilen aus der aktuellen Zeile auf Daten zugreifen zu können.

In der aktuellen Zeile können Sie beispielsweise auf die vorherige Zeile zugreifen, die zur aktuellen Zeile wird, und Sie können auf die vorherige Zeile zugreifen, usw.

In diesem Artikel lernen wir, wie Sie die LAG -Funktion auf dem SQL -Server anhand verschiedener Beispiele verwenden.

SQL Server lag () Funktion

Wir drücken die Syntax der Funktion als:

Verzögerung (Ausdruck, Offset [, Standard])
ÜBER (
[Partition von partition_by_expression]
order_by_clause
)

Funktionsparameter und Rückgabewert

In der obigen Syntax haben wir die folgenden Parameter:

  1. Ausdruck - Eine Spalte oder eine Ausdruck, die von der LAG -Funktion verwendet wird, um die Berechnungen durchzuführen. Dies ist ein erforderlicher Parameter, und der Ausdruck muss einen einzelnen Wert zurückgeben.
  2. Offset - Ein positiver Ganzzahlwert, der definiert, wie viele Zeilen zurückkehren, die die Lag -Funktion zurückholt. Wenn nicht angegeben, wird der Standardwert auf 1 gesetzt.
  3. Standard - Gibt den Standardwert an, der von der Funktion zurückgegeben wird, wenn der angegebene Offset -Wert über den Bereich der Partition hinausgeht. Standardmäßig gibt die Funktion null zurück.
  4. Partition_by_expression - Ein Ausdruck, der zum Erstellen logischer Datenpartitionen verwendet wird. SQL Server wendet die LAG -Funktion auf die resultierenden Partitionssätze an.
  5. Order_by_clause - Ein Ausdruck, um zu definieren, wie die Reihen in den resultierenden Partitionen geordnet werden.

Die Funktion gibt den Datentyp des skalaren Ausdrucks zurück.

Beispiele für SQL Server LAG

Schauen wir uns ein praktisches Beispiel an, um besser zu verstehen, wie die Lag -Funktion verwendet wird. Beginnen wir mit dem Hinzufügen von Beispieldaten wie gezeigt:

Datenbank abgetastet werden;
GEHEN
Verwenden Sie ProbleedB;
Tabelle erstellen lag_func (
ID int nicht Null -Identität (1,1) Primärschlüssel,
dbname varchar (50),
Paradigmenvarchar (50),
);
In lag_func (dbname, Paradigma) einfügen)
Werte ('MySQL', 'Relational'),
('MongoDB', 'Dokument'),
('Memcached', 'Schlüsselwertgeschäft'),
('Etcd', 'Schlüsselwertgeschäft'),
('Apache Cassandra', 'breite Spalte'),
('Couchdb', 'Dokument'),
('PostgreSQL', 'Relational'),
('SQL Server', 'Relational'),
('Neo4j', 'Graph'),
('ElasticSearch', 'Volltext');
Wählen Sie * aus lag_func;

Der obige Abfragesatz sollte Daten als:

Führen Sie die LAG -Funktion in der DBNAME -Spalte aus, wie in der folgenden Beispielabfrage gezeigt:

Wählen Sie *, lag (dbname, 1) over (order by dbname) als vorheriger_db von lag_func;

Die obige Abfrage gibt eine Ausgabe zurück als:

Hinweis, die erste Zeile enthält einen Nullwert, da sie keinen vorherigen Wert hat.

Beispiel 2:

Anstatt einen Nullwert zu erhalten, bei dem die Zeile keine vorherige Zeile enthält, können wir einen Standardwert festlegen, wie in der folgenden Beispielabfrage gezeigt:

Wählen Sie DBNAME, LAG (dbname, 1, 'n/a')
Over (bestellen von dbname) als vorher_db
Von lag_func;

Die obige Abfrage gibt eine ähnliche Ausgabe wie oben zurück. Anstelle von Null erhalten wir jedoch die angegebene Zeichenfolge.

Beispiel 3: benutzerdefinierter Offsetwert

Wir können die Werte auch für einen benutzerdefinierten Offset -Wert abrufen. Um beispielsweise den Wert von drei vorherigen Zeilen zu erhalten, können wir die Abfrage verwenden:

Wählen Sie DBNAME, LAG (dbname, 3, 'n/a')
Over (bestellen von dbname) als vorher_db
Von lag_func;

Der obige Beispielcode sollte das Ergebnis als:

Hier sind die ersten 3 Spalten null, da die Offset -Werte über den Bereich der verfügbaren Zeilen hinausgehen.

Beispiel 4: Partition von

Wir können logische Partitionen verwandter Daten unter Verwendung der Partition nach Klausel erstellen. Wir können dann die Lag -Funktion auf jede Partition anwenden.

Betrachten Sie das folgende Beispiel:

Wählen Sie DBNAME, Paradigma, LAG (DBNAME, 1, 'N/A')
Over (Partition nach Paradigmenbestellung von dbname) als vorheriger_db
Von lag_func;

Die obige Abfrage gibt eine Beispielabfrage zurück als:

Die Abfrage erstellt 6 Partitionen, die auf dem Paradigma im obigen Ergebnis basieren. Auf jeder Partition holt die Lag -Funktion die vorherige Zeile ab.

Abschluss

In diesem Artikel wurde beigebracht.

Vielen Dank für das Lesen!