Zurück zur Artikelliste Artikel
9 Leseminuten

SQL-Funktion FIRST_VALUE

Entdecken Sie die Leistungsfähigkeit der Funktion FIRST_VALUE, einer Fensterfunktion, die den ersten Wert in einer geordneten Partition der Ergebnismenge zurückgibt. Diese Funktion ist für jeden nützlich, der Datenanalysen in SQL durchführt.

Fensterfunktionen sind eine leistungsstarke Kategorie von Funktionen, die eine anspruchsvolle Datenanalyse in SQL ermöglichen. Diese Funktionen arbeiten mit einem "Fenster" von Zeilen, die sich auf die aktuelle Zeile beziehen, und ermöglichen die Erstellung komplexer Berichte wie laufende Summen, gleitende Durchschnitte, die Erstellung von Ranglisten und andere. Eine der üblichen Fensterfunktionen ist die Funktion FIRST_VALUE.

Die Funktion FIRST_VALUE gibt den ersten Wert in einer geordneten Partition einer Ergebnismenge zurück. Die Funktion kann in Szenarien hilfreich sein, in denen Sie einen aktuellen Wert mit dem ersten Wert in einer bestimmten Menge vergleichen:

  • die Veränderung der Aktienkurse vom ersten Ausgabekurs bis zum aktuellen Kurs, um die Entwicklung einer Aktie seit ihrem Erscheinen zu verfolgen.
  • die Veränderung des Produktpreises vom ersten Ausgabepreis bis zum aktuellen Preis, um Preisschwankungen oder die Höhe des Rabatts vom ursprünglichen Preis zu analysieren.
  • die Veränderung der ersten aufgezeichneten Vitalparameter (wie Blutdruck oder Blutzuckerspiegel) eines Patienten bei der ersten Aufnahme ins Krankenhaus im Vergleich zu den späteren Messwerten.
  • die aktuelle Temperatur mit der ersten an diesem Datum oder in diesem Jahr aufgezeichneten Temperatur zu vergleichen, z. B. um Klimaveränderungen oder Wettermuster zu untersuchen.

Die Funktion FIRST_VALUE ist das doppelte Gegenstück zu einer anderen SQL-Fensterfunktion, LAST_VALUE. FIRST_VALUE gibt den ersten Wert in einem Datensatz zurück, während LAST_VALUE den letzten Wert in einem Datensatz zurückgibt.

Wenn Sie etwas über Fensterfunktionen lernen möchten, empfehle ich Ihnen unseren interaktiven Kurs Fensterfunktionen . Dieser Kurs eignet sich für alle, die SQL-Fensterfunktionen lernen und sie für eine effektivere Arbeit mit Daten nutzen möchten. Der Kurs enthält über 200 interaktive Übungen, die Ihnen helfen, Ihre Kenntnisse zu festigen.

Wie man die Funktion FIRST_VALUE verwendet

Die Funktion FIRST_VALUE gibt den ersten Wert eines Ausdrucks in einer nach einem anderen Ausdruck geordneten Menge zurück. Die Syntax für FIRST_VALUE ist einfach:

FIRST_VALUE(expression) OVER (
	[PARTITION BY column_1, column_2, ...]
	ORDER BY expression2
	[ROWS BETWEEN range_start AND range_end]
)
  • expression - die Spalte oder der Ausdruck, von dem Sie den ersten Wert abrufen möchten.
  • ORDER BY - legt die Sortierung der Datenzeilen in jeder Partition fest. FIRST_VALUE verwendet sie, um die erste Zeile zu identifizieren, aus der der Wert entnommen werden soll.
  • PARTITION BY - optional; unterteilt die Ergebnismenge in Partitionen, auf die die Funktion FIRST_VALUE unabhängig angewendet wird. Wenn PARTITION BY weggelassen wird, behandelt die Funktion die gesamte Ergebnismenge als eine einzige Partition.
  • ROWS BETWEEN - optional; definiert den Fensterrahmen, d.h. die Menge der Zeilen in jeder Partition relativ zur aktuellen Zeile.

Wir demonstrieren die Funktion FIRST_VALUE anhand von Beispielen mit einer Tabelle stock_quotes. Die Tabelle enthält Aktienkurse für verschiedene Unternehmen (Symbole) zu verschiedenen Daten und Zeiten. Die Tabelle hat die folgenden Spalten:

  • id (integer) - Ein eindeutiger Bezeichner für jeden Datensatz.
  • symbol (text) - Das Aktiensymbol.
  • quote_date (timestamp) - Das Datum und die Uhrzeit des Aktienkurses.
  • price (decimal) - Der Preis der Aktie an diesem Tag.

Hier sind einige Beispielzeilen aus der Tabelle (mit fiktiven Daten):

idsymbolquote_dateprice
1AAPL2023-04-01 9:00150
2AAPL2023-04-02 9:05148
3MSFT2023-04-01 9:00250
4MSFT2023-04-02 9:05255
5GOOGL2023-04-01 9:001200
6GOOGL2023-04-02 9:051210

Beispiel 1: Einfache Verwendung von FIRST_VALUE - der erste Kurs für ein bestimmtes Unternehmen

Dies ist die einfachste Anwendung der Funktion FIRST_VALUE: Wir möchten den ersten aufgezeichneten Kurs für ein bestimmtes Unternehmen finden, z. B. Apple Inc. (AAPL). Wir können die folgende SQL-Abfrage verwenden:

 SELECT
  quote_date,
  price,
  FIRST_VALUE(price) OVER (ORDER BY quote_date) AS first_price
 FROM stock_quotes
 WHERE symbol = 'AAPL';

Diese Abfrage wählt nur die Aktienkurse für Apple Inc. aus (Symbol AAPL). Sie wählt das Kursdatum und den Preis an diesem Datum aus. Sie verwendet die Funktion FIRST_VALUE, um den ersten aufgezeichneten Preis für das Unternehmen auszuwählen. Alle Aktienkurse für Apple werden mit OVER (ORDER BY quote_date) sortiert. Die Funktion FIRST_VALUE gibt den Preis für die erste Zeile in dieser Sortierung zurück, d. h. den ersten jemals für Apple aufgezeichneten Preis.

Beispiel 2: FIRST_VALUE mit PARTITION BY - Erster Kurs für alle Symbole

Normalerweise verwenden Sie FIRST_VALUE mit PARTITION BY. Auf diese Weise wird die Funktion FIRST_VALUE in jeder durch PARTITION BY definierten Partition separat angewendet. Angenommen, Sie müssen den ersten Preis für jedes Unternehmen finden. Hier ist die Abfrage, die Sie schreiben würden:

SELECT
  symbol,
  quote_date,
  price,
  FIRST_VALUE(price) OVER (PARTITION BY symbol ORDER BY quote_date) AS first_price
FROM stock_quotes;

In dieser Abfrage partitionieren wir die Daten nach symbol (PARTITION BY symbol). Dadurch wird für jedes Unternehmen (Symbol) eine eigene Partition erstellt. Die Funktion FIRST_VALUE wird auf jede Partition separat angewendet. Wie im vorherigen Beispiel ordnen wir die Daten nach Kursdatum. Die Funktion FIRST_VALUE gibt den Preis für die erste Zeile in jeder Partition zurück. Die Abfrage gibt also das Symbol, das Kursdatum, den Preis an diesem Datum und den ersten aufgezeichneten Preis für dieses Symbol zurück.

Wir können den Wert der Funktion FIRST_VALUE verwenden, um das prozentuale Wachstum des aktuellen Preises im Vergleich zum ersten aufgezeichneten Preis zu berechnen, etwa so:

SELECT
  symbol,
  quote_date,
  price,
  FIRST_VALUE(price) OVER (
    PARTITION BY symbol 
    ORDER BY quote_date) AS first_price,
  100.0 * (price - FIRST_VALUE(price) OVER (
         PARTITION BY symbol 
         ORDER BY quote_date)) 
   / FIRST_VALUE(price) OVER (
         PARTITION BY symbol 
         ORDER BY quote_date) AS perc_growth
FROM stock_quotes;

Beispiel 3. Erster Wert für jeden Tag für jedes Unternehmen

Sie können die Funktion FIRST_VALUE verwenden, um den Eröffnungskurs (den ersten Kurs des Tages) für jedes Datum wie folgt zu berechnen:

SELECT DISTINCT
  symbol,
  CAST(quote_date AS DATE) AS date,
  FIRST_VALUE(price) OVER (
    PARTITION BY symbol, CAST(quote_date AS DATE) 
    ORDER BY quote_date) AS opening_price
FROM stock_quotes;

Hier partitionieren wir die Daten nach Symbol (Unternehmen) und Datum. Wir wandeln die Spalte quote_date in DATE um, um nur den Datumswert zu extrahieren. Wie zuvor verwenden wir ORDER BY quote_date, um die Werte nach Datum zu sortieren. Wir verwenden die Funktion FIRST_VALUE und wählen die erste Zeile in jeder Partition aus, d. h. den ersten Kurs für jedes Datum und jedes Unternehmen. Auf diese Weise erhalten wir den Eröffnungskurs für jeden Tag: den ersten an diesem Tag aufgezeichneten Kurs. Wir verwenden auch DISTINCT, um nur eine Zeile für jedes Datum und Symbol zu erhalten.

Weitere praktische Beispiele für SQL-Fensterfunktionen finden Sie in unserem Artikel: SQL Fensterfunktionen Beispiele. Sie können auch unseren Artikel 11 SQL Fensterfunktionen Übungen mit Lösungen besuchen, der praktische Übungen für Fensterfunktionen enthält.

FIRST_VALUE und andere Fensterfunktionen

FIRST_VALUE ist ähnlich wie andere Fensterfunktionen.

FIRST_VALUE vs. LAST_VALUE

Die Funktion FIRST_VALUE hat ein doppeltes Gegenstück, LAST_VALUE. Wie der Name schon sagt, gibt die Funktion LAST_VALUE den letzten Wert in der geordneten Partition einer Ergebnismenge zurück. Mit FIRST_VALUE vergleichen Sie den aktuellen Wert mit dem Anfangspunkt der Daten, während Sie mit LAST_VALUE den Wert mit dem Endpunkt vergleichen.

Wenn Sie die Funktion LAST_VALUE verwenden, müssen Sie daran denken, den Fensterrahmen auf RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING zu setzen, um sicherzustellen, dass er Zeilen von der aktuellen Zeile bis zum Ende der Partition einschließt. Andernfalls verwendet OVER() den Standardfensterrahmen für ORDER BY und LAST_VALUE gibt den Wert für die aktuelle Zeile zurück.

Um sich dieses Detail und andere Feinheiten der SQL-Fensterfunktionen zu merken, empfehlen wir unser SQL Fensterfunktionen Cheat Sheet. Dabei handelt es sich um eine herunterladbare Kurzanleitung für Fensterfunktionen.

MIN vs. ERSTER_WERT

Die Funktion FIRST_VALUE kann leicht mit der FunktionMIN verwechselt werden. Die Funktion MIN gibt den kleinsten Wert im Datensatz zurück. Die Funktion FIRST_VALUE findet den Wert eines Ausdrucks für die kleinste Zeile auf der Grundlage des in ORDER BY angegebenen Ausdrucks.

Normalerweise verwenden Sie die Funktion FIRST_VALUE mit zwei verschiedenen Ausdrücken als Argument der Funktion FIRST_VALUE und in ORDER BY. Diese Abfrage gibt, wie wir schon oft in diesem Artikel gesehen haben, den ersten aufgezeichneten Preis von Apple, Inc. zurück.

SELECT
   quote_date,
   price,  
   FIRST_VALUE(price) OVER(ORDER BY quote_date) AS first_price
FROM stock_quotes
WHERE symbol = 'AAPL';

Wenn Sie die Spalte price sowohl als Argument der Funktion FIRST_VALUE als auch in ORDER BY verwenden, gibt die Abfrage auch den kleinsten Preis von Apple, Inc. zurück.

SELECT
   FIRST_VALUE(price) OVER(ORDER BY price) AS first_price
FROM stock_quotes
WHERE symbol = 'AAPL';

Diese Abfrage gibt mehrere Zeilen zurück, eine für jede Zeile mit dem Apple-Aktienkurs.

Diese Abfrage gibt den Mindestpreis für Apple, Inc. zurück:

SELECT
  MIN(price)
FROM stock_quotes
WHERE symbol = 'AAPL';

Die Abfrage gibt nur eine Zeile mit einem Wert zurück: den für Apple erfassten Mindestpreis.

Sie können die Funktion MIN als eine Fensterfunktion verwenden:

SELECT
  quote_date,
  price,  
  MIN(price) OVER(ORDER BY quote_date) AS min_price
FROM stock_quotes
WHERE symbol = 'AAPL';

Diese Abfrage gibt das laufende Minimum der Spalte price zurück, geordnet nach quote_date. Mit anderen Worten: Sie gibt den kleinsten Preis zurück, der vom Beginn des Datensatzes bis einschließlich dieser Zeile aufgetreten ist, geordnet nach quote_date.

FIRST_VALUE vs. LEAD und LAG

FIRST_VALUE ist auch ähnlich wie die Funktionen LEAD und LAG. LEAD und LAG geben den Wert in nachfolgenden oder vorangehenden Zeilen zurück, während FIRST_VALUE den Wert der ersten Zeile in der Partition zurückgibt. LEAD und LAG eignen sich am besten, wenn Sie eine Folge von Werten vergleichen müssen, z. B. die Umsätze von einem Monat zum nächsten. FIRST_VALUE wird in Szenarien verwendet, in denen Sie sich auf den ersten Eintrag in einem Datensatz beziehen.

Einen Überblick über die wichtigsten Themen zu SQL-Fensterfunktionen finden Sie in unserem Artikel Top 10 SQL Fensterfunktionen Interviewfragen

Fazit und weiterführende Literatur

Die Funktion FIRST_VALUE ist eine wichtige SQL-Fensterfunktion. Sie ist nützlich für die Analyse von Trends im Zeitverlauf, z. B. um zu sehen, wie sich Aktienkurse oder Verkaufszahlen in einem bestimmten Zeitraum entwickeln. Wenn Sie lernen, wie man FIRST_VALUE verwendet, können Sie Ihre Fähigkeit zur Analyse von Zeitreihendaten verbessern.

Wenn Sie daran interessiert sind, die Verwendung von SQL-Fensterfunktionen zu verbessern, empfehlen wir Ihnen unseren interaktiven Kurs Fensterfunktionen . Er enthält 218 praktische Übungen, mit denen Sie die Fensterfunktionen durch Übung erlernen können. Wenn Sie die Fensterfunktionen bereits kennen, aber noch mehr Übung brauchen, empfehlen wir Ihnen unser Fensterfunktionen Practice Set mit 100 Übungen, mit denen Sie die Fensterfunktionen in realen Szenarien üben können.

Eine Kurzanleitung zu den SQL-Fensterfunktionen finden Sie auf dem SQL Fensterfunktionen Cheat Sheet. Es ist eine Kurzanleitung für Fensterfunktionen, die online verfügbar ist und als PDF heruntergeladen werden kann.

Alle unsere Kurse, einschließlich Fensterfunktionen und Fensterfunktionen Practice Set, sind einzeln oder als Teil unseres Alle für immer SQL-Pakets erhältlich. Mit diesem Paket erhalten Sie gegen eine einmalige Zahlung lebenslangen Zugang zu allen aktuellen und zukünftigen SQL-Kursen auf unserer Plattform. Ganz gleich, ob Sie mit SQL beginnen oder Ihre Kenntnisse erweitern möchten, dieses Paket unterstützt Sie bei jedem Schritt auf Ihrem Lernweg. Melden Sie sich noch heute an, um Ihre SQL-Kenntnisse kontinuierlich zu erweitern.