23rd Jun 2022 12 Leseminuten Die RANGE-Klausel in SQL-Fensterfunktionen: 5 praktische Beispiele Tihomir Babic Window Functions Inhaltsverzeichnis Syntax der RANGE-Klausel Sind die RANGE- und die ROW-Klausel das Gleiche? Welche Datentypen kann ich in der RANGE-Klausel verwenden? Beispiel 1 - Berechnen der laufenden Summe Beispiel 2 - Berechnen des gleitenden Durchschnitts Gleitender Durchschnitt für Datenbanken, die die Verwendung von RANGE mit Datums-/Zeitdatentypen nicht unterstützen Beispiel 3 - Suche nach dem letzten Wert innerhalb eines Bereichs Beispiel 4 - Ermitteln der Anzahl der Elemente innerhalb eines Bereichs Beispiel 5 - Suche nach dem Maximalwert RANGE hat wirklich eine ganze Reihe von Verwendungsmöglichkeiten, nicht wahr? Was ist eine RANGE Klausel in SQL-Fensterfunktionen? Anhand von fünf praktischen Beispielen erfahren Sie, wie und wann Sie sie verwenden können. Die RANGE -Klausel wird in SQL-Fensterfunktionen recht selten verwendet. Ich weiß nicht, warum; vielleicht sind die Leute nicht daran gewöhnt. Das ist schade, denn die Klausel ist keineswegs überflüssig, sondern kann sehr nützlich sein, wie ich Ihnen in fünf Beispielen zeigen werde. Syntax der RANGE-Klausel Wenn ich von der RANGE -Klausel spreche, meine ich die Klausel, die in den SQL-Fensterfunktionen verwendet wird, die die folgende Syntax haben: OVER ( [ <PARTITION BY clause> ] [ <ORDER BY clause> ] [ <ROW or RANGE clause> ] ) Wenn Sie sich die obige Syntax ansehen, sehen Sie, dass sowohl ROW als auch RANGE Teil der Fensterfunktion sein können. Ihre Syntax lautet wie folgt: [<ROWS oder RANGE-Klausel> BETWEEN <Start expr> AND <End expr>] Der Standard-Fensterrahmen ohne die ORDER BY ist die gesamte Partition. Wenn Sie jedoch die ORDER BY-Klausel verwenden, ist der Standard-Fensterrahmen RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Es ist normal, dass man diese Syntax vergisst, vor allem, wenn sie für Sie neu ist oder Sie sie nicht sehr oft verwenden. Sie können gerne Ihr Fensterfunktionen Cheat Sheet öffnen, während Sie diesen Artikel lesen. Bereit zum Eintauchen? Prima! Lassen Sie uns zunächst über RANGE und ROW sprechen. Sind die RANGE- und die ROW-Klausel das Gleiche? Nein, das sind sie nicht. Sie haben jedoch denselben Zweck: die Angabe von Anfangs- und Endpunkten innerhalb der Partition mit dem Ziel, Zeilen zu begrenzen. Jede Klausel tut dies jedoch auf unterschiedliche Weise. Bei der ROW -Klausel wird eine feste Anzahl von Zeilen angegeben, die vor oder nach der aktuellen Zeile liegen. Die RANGE Klausel hingegen schränkt die Zeilen logisch ein; sie gibt den Wertebereich in Bezug auf den Wert der aktuellen Zeile an. Welche Datentypen kann ich in der RANGE-Klausel verwenden? Sie können zwei Datentypen mit der RANGE -Klausel verwenden: numerische und Datums-/Zeittypen. Sie können die numerischen Datentypen und die RANGE -Klausel in fast allen gängigen Datenbanken verwenden. Microsoft SQL Server unterstützt dies leider nicht. Was die Datums-/Zeit-Datentypen betrifft, so unterstützen nur wenige gängige Datenbanken deren Verwendung mit der RANGE -Klausel. Dies sind PostgreSQL, MySQL und Oracle DB. Kommen wir nun zu den Beispielen und sehen wir uns an, wie RANGE in der Praxis funktioniert! Wenn Sie mit SQL-Fensterfunktionen noch nicht vertraut sind, sollten Sie sich vielleicht erst einmal informieren, was Fensterfunktionen sind und wie sie sich von Aggregatfunktionen unterscheiden. Kommen Sie wieder, wenn Sie mit dem Lesen fertig sind, und wir machen weiter. Beispiel 1 - Berechnen der laufenden Summe Die Daten, mit denen ich arbeiten werde, befinden sich in der Tabelle revenue. Die Spalten sind: id - Die ID des Datums und der Primärschlüssel (PK) der Tabelle. date - Das Datum des Umsatzes. revenue_amount - Der Betrag des Umsatzes. Ihre Aufgabe ist es, die laufende Umsatzsumme mit Hilfe der RANGE Klausel zu berechnen. Lassen Sie uns das zunächst ohne SQL machen. Wenn Sie die folgenden Daten haben, wie lautet dann die laufende Summe (auch bekannt als kumulative Summe)? iddaterevenue_amountrunning_total 12021-05-0112,573.2512,573.25 22021-05-0211,348.2223,921.47 32021-05-0214,895.1338,816.60 42021-05-0314,388.1453,204.74 52021-05-0418,847.5472,052.28 Die laufende Summe für 2021-05-01 entspricht dem Umsatz für dieses Datum: 12.573,25. Das liegt daran, dass es keine vorherigen Zeilen gibt, die in die Berechnung einbezogen werden können. Dann kommt 2021-05-02. Die laufende Summe ist die Summe der heutigen Einnahmen und der Einnahmen des Vortages: 11,348.22 + 12,573.25 = 23,921.47. Beachten Sie, dass es eine weitere Zeile mit einer anderen Einnahmesumme für 2021-05-02 gibt. Vielleicht ist dies für eine andere Branche, ein anderes Land, ein anderes Produkt oder was auch immer. Es funktioniert auf dieselbe Weise: 14.895,13 + 23.921,47 = 38.816,60. (Die RANGE-Klausel funktioniert auch, wenn es mehrere Zeilen mit demselben Datum gibt). Als nächstes kommt 2021-05-03. Die laufende Summe für dieses Datum beträgt 14.388,14 + 38.816,60 = 53.204,74. Schließlich wird die laufende Summe für 2021-05-04 18.847,54 + 53.204 = 72.052,28 betragen. Wie kann man das Gleiche mit der Klausel RANGE machen? Es könnte so gemacht werden: SELECT id, date, revenue_amount, SUM(revenue_amount) OVER ( ORDER BY date RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS running_total FROM revenue; Ich habe die Funktion SUM() auf die Spalte revenue_amount angewendet; dies ist die erforderliche Operation, um die laufende Summe zu erhalten. Damit die Funktion SUM() zu einer Fensterfunktion wird, benötigen Sie die Klausel OVER(). Die Berechnung der Fensterfunktion erfolgt in aufsteigender Reihenfolge, denn ich möchte sicherstellen, dass die Einnahmen vom ältesten bis zum neuesten Datum summiert werden. Dann kommt die Klausel RANGE. Sie beschränkt das Fenster auf die Daten, die vor dem aktuellen Datum (BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) und dem aktuellen Datum liegen. Dies sind die Zeilen, die in die Berechnung der laufenden Summe einbezogen werden. Wenn Sie den Code ausführen, erhalten Sie das folgende Ergebnis: iddaterevenue_amountrunning_total 12021-05-0112,573.2512,573.25 22021-05-0211,348.2238,816.60 32021-05-0214,895.1338,816.60 42021-05-0314,388.1453,204.74 52021-05-0418,847.5472,052.28 62021-05-059,845.2981,897.57 72021-05-0614,574.5696,472.13 82021-05-0711,500.63107,972.76 92021-05-0816,897.21124,869.97 102021-05-099,634.56134,504.53 112021-05-1014,255.87148,760.40 122021-05-1111,248.33160,008.73 132021-05-1221,489.22181,497.95 142021-05-1314,448.65195,946.60 152021-05-1415,517.22211,463.82 162021-05-156,874.23218,338.05 172021-05-1612,500.00230,838.05 182021-05-179,784.33240,622.38 192021-05-1815,321.89255,944.27 202021-05-1912,235.50268,179.77 212021-05-2022,222.22290,401.99 212021-05-2114,800.65305,202.64 222021-05-225,894.12311,096.76 232021-05-2318,845.69329,942.45 242021-05-249,966.66339,909.11 252021-05-2513,250.69353,159.80 262021-05-264,987.56358,147.36 272021-05-2717,784.25375,931.61 282021-05-2812,567.45388,499.06 292021-05-2919,874.26408,373.32 302021-05-3015,489.36423,862.68 312021-05-3114,987.55438,850.23 Beachten Sie, dass bei mehreren Werten für ein Datum (2021-05-02) der Code beide Zeilen in die Berechnung der laufenden Summe für dieses Datum einbezieht. Aus diesem Grund steht in der Spalte running_total für dieses Datum 38.816,60. Beispiel 2 - Berechnen des gleitenden Durchschnitts Lassen Sie uns nun sehen, wie Sie die RANGE Klausel mit Datums-/Zeit-Datentypen verwenden - und ohne die id-Spalte als Hilfe! Wir verwenden eine leicht veränderte Tabelle, die jetzt den Namen revenue_per_shop. Sie enthält die Umsatzdaten für zwei Geschäfte. Die Spalten sind: date - Das Datum des Umsatzes. shop - Der Name des Shops. revenue_amount - Die Höhe des Umsatzes für diesen Shop an diesem Datum. Stellen Sie zunächst sicher, dass Sie verstehen, was ein gleitender Durchschnitt ist. Ein gleitender Zweitagesdurchschnitt umfasst den aktuellen Tag und den Vortag. Hier sind einige Beispieldaten, die Ihnen zeigen, wie ein gleitender Durchschnitt funktioniert: daterevenue_amountmoving_avg 2021-05-0112,573.2512,573.25 2021-05-0211,348.2211,960.74 2021-05-0314,388.1412,868.18 2021-05-0418,847.5416,617.84 Der gleitende Zwei-Tages-Durchschnitt für 2021-05-01 ist der Tagesumsatz selbst: 12,573.25. Das liegt daran, dass es keine anderen Zeilen gibt, die in die Berechnung einbezogen werden können. Die Berechnung für 2021-05-02 umfasst zwei Daten: (12.573,25 + 11.348,22)/2 = 11.960,74. Die anderen Zeilen folgen der gleichen Logik mit zwei Daten - dem aktuellen Datum und dem vorherigen Datum. Wie berechnen Sie nun dieselbe Kennzahl für jeden einzelnen Shop? Etwa so: SELECT shop, date, revenue_amount, AVG(revenue_amount) OVER ( PARTITION BY shop ORDER BY date ASC RANGE BETWEEN INTERVAL '1' DAY PRECEDING AND CURRENT ROW ) AS moving_avg FROM revenue_per_shop; Der Code wählt zunächst einige Spalten aus der Tabelle aus. Dann kommt der lustige Teil. Ich verwende die Funktion AVG() für die Spalte revenue_amount, weil ich den durchschnittlichen Umsatz haben möchte. Auch hier handelt es sich um eine Fensterfunktion, also muss sie die Klausel OVER() enthalten. Ich verwende PARTITION BY, um die Spalte anzugeben, über die ich die Daten aggregieren möchte; es ist die Spalte shop, weil ich den gleitenden Durchschnitt für jeden Shop einzeln haben möchte. Die Operation ist wiederum nach Datum geordnet. In der Klausel RANGE gebe ich lediglich an, welche Zeilen in die Berechnung einbezogen werden sollen. Da ich mit Datumsangaben arbeite, erhalte ich das vorherige Datum durch die Angabe: BETWEEN INTERVAL '1' DAY PRECEDING. Die Arbeit mit Datums-/Zeitdaten unterscheidet sich von Datenbank zu Datenbank. In einigen Datenbanken müssen Sie es vielleicht so schreiben: RANGE BETWEEN 1 DAY PRECEDING AND CURRENT ROW. Das Ergebnis sollte jedoch dasselbe sein: shopdaterevenue_amountmoving_avg Shop 12021-05-0112,573.2512,573.25 Shop 12021-05-0214,388.1413,480.70 Shop 12021-05-039,845.2912,116.72 Shop 12021-05-0411,500.6310,672.96 Shop 12021-05-059,634.5610,567.60 Shop 12021-05-0611,248.3310,441.45 Shop 12021-05-0714,448.6512,848.49 Shop 12021-05-086,874.2310,661.44 Shop 12021-05-099,784.338,329.28 Shop 12021-05-1012,235.5011,009.92 Shop 12021-05-1114,800.6513,518.08 Shop 12021-05-1218,845.6916,823.17 Shop 12021-05-1313,250.6916,048.19 Shop 12021-05-1417,784.2515,517.47 Shop 12021-05-1519,874.2618,829.26 Shop 22021-05-0111,348.2211,348.22 Shop 22021-05-0218,847.5415,097.88 Shop 22021-05-0314,574.5616,711.05 Shop 22021-05-0416,897.2115,735.89 Shop 22021-05-0514,255.8715,576.54 Shop 22021-05-0621,489.2217,872.55 Shop 22021-05-0715,517.2218,503.22 Shop 22021-05-0812,500.0014,008.61 Shop 22021-05-0915,321.8913,910.95 Shop 22021-05-1022,222.2218,772.06 Shop 22021-05-115,894.1214,058.17 Shop 22021-05-129,966.667,930.39 Shop 22021-05-134,987.567,477.11 Shop 22021-05-1412,567.458,777.51 Shop 22021-05-1515,489.3614,028.41 Gleitender Durchschnitt für Datenbanken, die die Verwendung von RANGE mit Datums-/Zeitdatentypen nicht unterstützen Was sollten Sie tun, wenn Ihre Datenbank die Verwendung von RANGE mit Datums-/Zeitdatentypen nicht unterstützt? Es gibt eine Möglichkeit, Ihre Datenbank "auszutricksen"; wahrscheinlich gibt es sogar mehrere. Hier ist eine Möglichkeit, die die Differenz zwischen jedem Datum und 2021-05-01 (d. h. dem ersten Datum in den Daten) berechnet. Sie erhalten die Differenz als Ganzzahl, die Sie anstelle des Datums verwenden können. Dies ist der Code: SELECT shop, date, revenue_amount, date - '2021_05_01' AS day_difference, AVG(revenue_amount) OVER ( PARTITION BY shop ORDER BY (date - '2021_05_01') RANGE BETWEEN 1 PRECEDING AND CURRENT ROW ) AS moving_avg FROM revenue_per_shop; Ich habe absichtlich die Spalte day_difference in das Ergebnis aufgenommen, damit Sie die Logik verstehen. Ich habe dieselbe Differenz in der ORDER BY -Klausel verwendet, damit ich eine ganze Zahl mit der RANGE -Klausel verwenden kann. Und der gleitende Durchschnitt ist der gleiche wie im obigen Beispiel; sehen Sie selbst. (Ich zeige nur die ersten fünf Zeilen, um Platz zu sparen.) shopdaterevenue_amountday_differencemoving_avg Shop 12021-05-0112,573.25012,573.25 Shop 12021-05-0214,388.14113,480.70 Shop 12021-05-039,845.29212,116.72 Shop 12021-05-0411,500.63310,672.96 Shop 12021-05-059,634.56410,567.60 Beispiel 3 - Suche nach dem letzten Wert innerhalb eines Bereichs Diese Verwendung der RANGE-Klausel ermöglicht es Ihnen, den letzten Wert innerhalb eines bestimmten Bereichs zu finden. Wenn ich zum Beispiel die Tabelle revenue_by_shopden letzten Wert für jedes Geschäft separat abrufen. Der letzte Wert ist in diesem Fall der letzte verfügbare Wert, d. h. der Umsatz des Jahres 2021-05-15. Wie erhalten Sie diese Daten? Natürlich unter Verwendung der RANGE Klausel: SELECT shop, date, revenue_amount, LAST_VALUE(revenue_amount) OVER ( PARTITION BY shop ORDER BY date RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS last_value FROM revenue_per_shop; Die Fensterfunktion, die ich dieses Mal verwendet habe, ist LAST_VALUE(). Auch hier verwende ich sie für die Spalte revenue_amount. Ich habe die Daten wie zuvor nach Geschäften aufgeteilt. Und ich habe sie nach Datum geordnet, wie zuvor. Um den letzten Wert zu erhalten, habe ich RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING verwendet. Denken Sie daran, dass der Standardbereich mit der ORDER BY Klausel RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ist. Wenn Sie ihn nicht ändern, erhalten Sie das falsche Ergebnis. Das richtige Ergebnis lautet: shopdaterevenue_amountlast_value Shop 12021-05-0112,573.2519,874.26 Shop 12021-05-0214,388.1419,874.26 Shop 12021-05-039,845.2919,874.26 Shop 12021-05-0411,500.6319,874.26 Shop 12021-05-059,634.5619,874.26 Shop 12021-05-0611,248.3319,874.26 Shop 12021-05-0714,448.6519,874.26 Shop 12021-05-086,874.2319,874.26 Shop 12021-05-099,784.3319,874.26 Shop 12021-05-1012,235.5019,874.26 Shop 12021-05-1114,800.6519,874.26 Shop 12021-05-1218,845.6919,874.26 Shop 12021-05-1313,250.6919,874.26 Shop 12021-05-1417,784.2519,874.26 Shop 12021-05-1519,874.2619,874.26 Shop 22021-05-0111,348.2215,489.36 Shop 22021-05-0218,847.5415,489.36 Shop 22021-05-0314,574.5615,489.36 Shop 22021-05-0416,897.2115,489.36 Shop 22021-05-0514,255.8715,489.36 Shop 22021-05-0621,489.2215,489.36 Shop 22021-05-0715,517.2215,489.36 Shop 22021-05-0812,500.0015,489.36 Shop 22021-05-0915,321.8915,489.36 Shop 22021-05-1022,222.2215,489.36 Shop 22021-05-115,894.1215,489.36 Shop 22021-05-129,966.6615,489.36 Shop 22021-05-134,987.5615,489.36 Shop 22021-05-1412,567.4515,489.36 Shop 22021-05-1515,489.3615,489.36 Beispiel 4 - Ermitteln der Anzahl der Elemente innerhalb eines Bereichs Hier ist eine weitere lustige und nützliche Möglichkeit, die RANGE Klausel zu verwenden. Wie würden Sie herausfinden, wie oft der Tagesumsatz eines beliebigen Geschäfts zwischen 1.000 (Dollar, Euro...) unter und über dem aktuellen Wert lag? Dieser Code könnte Ihnen helfen: SELECT shop, date, revenue_amount, COUNT(*) OVER ( ORDER BY revenue_amount ASC RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING ) AS number_of_days FROM revenue_per_shop; Ich verwende die Funktion COUNT() window. Da ich nicht daran interessiert bin, die Einnahmen nach Geschäften zu trennen, gibt es keine PARTITION BY. Die Zählung erfolgt in aufsteigender Reihenfolge nach der Höhe des Umsatzes. Der Bereich wird durch RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING definiert. Der Code wird Folgendes zurückgeben: shopdaterevenue_amountnumber_of_days Shop 22021-05-134,987.562 Shop 22021-05-115,894.123 Shop 12021-05-086,874.232 Shop 12021-05-059,634.564 Shop 12021-05-099,784.334 Shop 12021-05-039,845.294 Shop 22021-05-129,966.664 Shop 12021-05-0611,248.334 Shop 22021-05-0111,348.224 Shop 12021-05-0411,500.635 Shop 12021-05-1012,235.507 Shop 22021-05-0812,500.006 Shop 22021-05-1412,567.455 Shop 12021-05-0112,573.255 Shop 12021-05-1313,250.694 Shop 22021-05-0514,255.875 Shop 12021-05-0214,388.146 Shop 12021-05-0714,448.656 Shop 22021-05-0314,574.568 Shop 12021-05-1114,800.658 Shop 22021-05-0915,321.897 Shop 22021-05-1515,489.365 Shop 22021-05-0715,517.225 Shop 22021-05-0416,897.212 Shop 12021-05-1417,784.252 Shop 12021-05-1218,845.692 Shop 22021-05-0218,847.542 Shop 12021-05-1519,874.261 Shop 22021-05-0621,489.222 Shop 22021-05-1022,222.222 Ich möchte Ihnen erklären, was dieses Ergebnis aussagt. Wenn Sie die erste Zeile nehmen, ist das Ergebnis in der Spalte number_of_days 2. Es gibt zwei Fälle, in denen die Einnahmen zwischen 3.987,56 und 5.987,56 liegen. Warum diese Spanne? Die Einnahmen für 2021-05-13 betragen 4.987,56. Also 4.987,56 - 1.000 = 3.987,56 und 4.987,56 + 1.000 = 5.987,56. Willst du das Ergebnis überprüfen? Welche beiden Fälle liegen innerhalb dieser Spanne? Offensichtlich die ersten beiden: shopdaterevenue_amountnumber_of_days Shop 22021-05-134,987.562 Shop 22021-05-115,894.123 Willst du die zweite Zeile überprüfen? Sie besagt, dass es drei Fälle zwischen 4.894,12 und 6.894,12 gibt - diese drei: shopdaterevenue_amountnumber_of_days Shop 22021-05-134,987.562 Shop 22021-05-115,894.123 Shop 12021-05-086,874.232 Die gleiche Logik gilt für den Rest der Daten. Beispiel 5 - Suche nach dem Maximalwert Dies ist nicht so einfach, wie es scheinen mag; ich spreche nicht von dem allgemeinen Höchstwert. Um den zu finden, bräuchten Sie die RANGE Klausel nicht. Aber wie wäre es, den Höchstwert (oder in diesem Fall den Umsatz) über fünf Tage hinweg zu ermitteln? Diese fünf Tage umfassen das aktuelle Datum, bis zu drei Tage davor und einen Tag nach dem aktuellen Datum. Nach all diesen Beispielen für die Verwendung von RANGE kennen Sie wahrscheinlich schon die Logik. Hier ist meine Lösung: SELECT shop, date, revenue_amount, MAX(revenue_amount) OVER ( ORDER BY DATE RANGE BETWEEN INTERVAL '3' DAY PRECEDING AND INTERVAL '1' DAY FOLLOWING ) AS max_revenue FROM revenue_per_shop; Ich verwende die Funktion MAX() als Fensterfunktion. Und wieder verwende ich sie mit der Spalte revenue_amount. In der Klausel OVER() gibt es kein PARTITION BY, da ich nicht daran interessiert bin, die Daten auf irgendeiner Ebene zu trennen. Die Definition des Bereichs ist nicht so schwierig: RANGE BETWEEN INTERVAL '3' DAY PRECEDING AND INTERVAL '1' DAY FOLLOWING. Dies schließt das aktuelle Datum, drei Tage davor und einen Tag danach ein. Hier ist das Ergebnis: shopdaterevenue_amountmax_revenue Shop 12021-05-0112,573.2518,847.54 Shop 22021-05-0111,348.2218,847.54 Shop 12021-05-0214,388.1418,847.54 Shop 22021-05-0218,847.5418,847.54 Shop 12021-05-039,845.29 18,847.54 Shop 22021-05-0314,574.5618,847.54 Shop 12021-05-0411,500.6318,847.54 Shop 22021-05-0416,897.2118,847.54 Shop 12021-05-059,634.56 21,489.22 Shop 22021-05-0514,255.8721,489.22 Shop 12021-05-0611,248.3321,489.22 Shop 22021-05-0621,489.2221,489.22 Shop 22021-05-0715,517.2221,489.22 Shop 12021-05-0714,448.6521,489.22 Shop 22021-05-0812,500.0021,489.22 Shop 12021-05-086,874.23 21,489.22 Shop 22021-05-0915,321.8922,222.22 Shop 12021-05-099,784.33 22,222.22 Shop 12021-05-1012,235.5022,222.22 Shop 22021-05-1022,222.2222,222.22 Shop 12021-05-1114,800.6522,222.22 Shop 22021-05-115,894.12 22,222.22 Shop 22021-05-129,966.66 22,222.22 Shop 12021-05-1218,845.6922,222.22 Shop 12021-05-1313,250.6922,222.22 Shop 22021-05-134,987.56 22,222.22 Shop 12021-05-1417,784.2519,874.26 Shop 22021-05-1412,567.4519,874.26 Shop 22021-05-1515,489.3619,874.26 Shop 12021-05-1519,874.2619,874.26 Schauen wir uns das Ergebnis für 2021-05-05 an - rosa markiert. Der Bereich ist gelb markiert. Um den maximalen Umsatz in diesem Bereich zu ermitteln, vergleicht SQL die Werte: 14,388.14, 18,847.54, 9,845.29, 14,574.56, 11,500.63, 16,897.21, 9,634.56, 14,255.87, 11,248.33, 21,489.22. Welches ist der höchste Wert? Es ist 21.489,22. Nachdem ich gelernt habe, wie man mit der Klausel RANGE den Maximalwert findet, habe ich die maximale Anzahl von Beispielen für diesen Artikel erreicht. Wenn Sie weitere Beispiele für Fensterfunktionen suchen , können Sie jederzeit diesen Artikel lesen. RANGE hat wirklich eine ganze Reihe von Verwendungsmöglichkeiten, nicht wahr? Ich denke, diese fünf Beispiele zeigen Ihnen einen guten Überblick über die Möglichkeiten der RANGE Klausel. Das ist aber nicht alles, was Sie damit machen können. Ihre Verwendung hängt von den Daten ab, die Sie haben, und wahrscheinlich auch von ein wenig Fantasie. Über diese Klausel wird nicht sehr oft gesprochen, was sehr schade ist. Ich empfehle jedem, sie zu lernen. Sie könnte Ihnen Zeit ersparen, die Sie für die Erstellung von Umgehungslösungen aufwenden müssen. Die RANGE-Klausel ist elegant und wirklich nicht sehr kompliziert. Wo kann man etwas über RANGE lernen? Natürlich in unserem Fensterfunktionen Kurs. Dort lernen Sie nicht nur die RANGE-Klausel, sondern alle Aspekte der Fensterfunktionen kennen. Sie können den Kurs auch nutzen, um Ihre SQL-Kenntnisse zu trainieren. Wenn Sie mehr wissen wollen, erfahren Sie in diesem Artikel alles über den Kurs und seine Möglichkeiten. Tags: Window Functions