So verwenden Sie SQL: 2011-Window-Funktionen

Hinzugefügt in SQL: 2011 sind fünf Fensterfunktionen, die einen Ausdruck in einer Reihe R2 zu bewerten, die irgendwo in den Fensterrahmen der aktuellen Zeile R1 ist. Die Funktionen sind VERZÖGERUNG

, FÜHREN, NTH_VALUE, FIRST_VALUE, und LAST_VALUE.

Diese Funktionen ermöglichen es Ihnen, Informationen aus den angegebenen Reihen zu ziehen, die in den Fensterrahmen der aktuellen Zeile sind.

Schauen Sie mit der LAG-Funktion zurück

Das VERZÖGERUNG Funktion ermöglicht es Ihnen, Informationen aus der aktuellen Zeile in dem Fenster, als auch Sie die Prüfung von einer anderen Zeile als Informationen abzurufen, die Sie angeben, dass die aktuelle Zeile vorangeht.

Nehmen wir zum Beispiel, dass Sie eine Tabelle, die den Gesamtumsatz für jeden Tag, für das laufende Jahr zeichnet. Eine Sache, die Sie wollen vielleicht wissen, ist, wie die heutige Umsatz von gestern vergleichen. Sie können dies tun, mit der VERZÖGERUNG Funktion, wie folgt:

SELECT TotalSale AS TodaySale, LAG (TotalSale) OVER (ORDER BY Verkaufsdatum) AS PrevDaySaleFROM DailyTotals-

Für jede Zeile in DailyTotals, Diese Abfrage würde eine Zeile zurückgeben dieser Zeile Gesamtumsatz und des Vortages Gesamtumsatz auflistet. Der Standard Offset 1, weshalb das Ergebnis des Vortages zurückgeführt wird eher als alle anderen.

Um den aktuellen Tagesumsatz mit denen einer Woche zu vergleichen, vor, können Sie das folgende verwenden:

SELECT TotalSale AS TodaySale, LAG (TotalSale, 7) OVER (ORDER BY Verkaufsdatum) AS PrevDaySaleFROM DailyTotals-

Die ersten sieben Zeilen in einem Fensterrahmen wird keinen Vorgänger haben, die eine Woche alt ist. Die Standard-Antwort auf diese Situation ist ein Null-Ergebnis zurück für PrevDaySale. Wenn Sie ein anderes Ergebnis zu einem Null-Ergebnis bevorzugen, zum Beispiel Null, können Sie angeben, was Sie in dieser Situation zurückgegeben werden sollen anstelle des Standard-Null-Wert, beispielsweise 0 (Null), wie hier gezeigt:

SELECT TotalSale AS TodaySale, LAG (TotalSale, 7, 0) OVER (ORDER BY Verkaufsdatum) AS PrevDaySaleFROM DailyTotals-

Das Standardverhalten ist Zeilen zu zählen, die eine Verzögerung Ausmaß haben, das ist in diesem Fall TotalSale, die einen Nullwert enthält. Wenn Sie über solche Zeilen zu überspringen wollen und zählen nur die Zeilen, die einen tatsächlichen Wert in der Lag Umfang haben, können Sie dies tun, indem Sie die Keywords hinzufügen IGNORE NULLS wie in der folgenden Variante des Beispiels dargestellt:

SELECT TotalSale AS TodaySale, LAG (TotalSale, 7, 0) IGNORE NULLSOVER (ORDER BY Verkaufsdatum) AS PrevDaySaleFROM DailyTotals-

Schau nach vorn mit der LEAD-Funktion

Das FÜHREN Fensterfunktion arbeitet genau die gleiche Weise die VERZÖGERUNG Funktion arbeitet jedoch anstelle zurück zu einer vorhergehenden Reihe von suchen, es blickt auf eine Zeile nach der aktuellen Zeile im Fensterrahmen. Ein Beispiel könnte sein:

SELECT TotalSale AS TodaySale, Blei (TotalSale, 7, 0) IGNORE NULLSOVER (ORDER BY Verkaufsdatum) AS NextDaySaleFROM DailyTotals-

Schauen Sie auf eine bestimmte Zeile mit der NTH_VALUE Funktion

Das NTH_VALUE Funktion ist ähnlich der VERZÖGERUNG und FÜHREN Funktionen, mit der Ausnahme, dass statt einen Ausdruck in einer Reihe der Auswertung vor oder nach der aktuellen Zeile folgende, wertet sie einen Ausdruck in einer Reihe, die an einem von der ersten oder der letzten Reihe im Fensterrahmen angegebene Offset ist.

Hier ein Beispiel:

SELECT TotalSale AS ChosenSale, NTH_VALUE (TotalSale, 2) FROM FIRSTIGNORE NULLSOVER (ORDER BY Verkaufsdatum) Reihen zwischen 10 vor und 10 nach) AS EarlierSaleFROM DailyTotals-

In diesem Beispiel EarlierSale wie folgt ausgewertet:

  • Der Fensterrahmen mit der aktuellen Zeile zugeordnet ist, gebildet wird. Es umfasst die zehn vorhergehenden und die zehn folgenden Zeilen.

  • TotalSale wird in jeder Zeile des Fensterrahmens ausgewertet.

  • IGNORE NULLS angegeben ist, so einen Nullwert enthält alle Zeilen für TotalSale werden übersprungen.

  • Ausgehend von dem ersten Wert, der nach der Ausschluss von Zeilen einen Nullwert für TotalSale enthält, vorwärts durch zwei Reihen (vorwärts, weil VON FIRST angegeben wurde).

Der Wert von EarlierSale ist der Wert von TotalSale aus der angegebenen Zeile.

Wenn Sie nicht wollen, Zeilen zu überspringen, die einen Nullwert haben für TotalSale, angeben RESPECT NULLS eher, als IGNORE NULLS. Das NTH_VALUE Funktion arbeitet ähnlich, wenn Sie angeben, FROM LAST Anstatt von VON FIRST, außer statt nach vorn aus dem ersten Datensatz im Fensterrahmen zu zählen, zählen Sie rückwärts aus dem letzten Datensatz im Fensterrahmen.

Die Zahl die Anzahl der Zeilen angibt zu zählen ist immer noch positiv, auch wenn Sie rückwärts anstatt vorwärts sind zu zählen.

Schauen Sie auf einen sehr spezifischen Wert mit FIRST_VALUE und LAST_VALUE

Das FIRST_VALUE und LAST_VALUE Funktionen sind Spezialfälle der NTH_VALUE Funktion. FIRST_VALUE ist äquivalent zu NTH_VALUE woher VON FIRST angegeben und der Offset gleich 0 (null). LAST_VALUE ist äquivalent zu NTH_VALUE woher FROM LAST angegeben ist und der Offset ist 0. Mit dieser beiden kann man entweder ignorieren oder respektieren nulls wählen.

Menü