Heim >Datenbank >MySQL-Tutorial >Wie finde ich Mindest- und Höchstwerte für aufeinanderfolgende Zeilen basierend auf bestimmten Aktwerten?
Identifizieren aufeinanderfolgender Zeilengruppen für die Aggregation
Problem:
Rufen Sie die minimalen und maximalen Werte von startt und ab endd für aufeinanderfolgende Zeilen mit bestimmten Aktwerten. Jeder eindeutige Name definiert eine eindeutige Abfolge von Aktvorkommnissen. Die Eingabe stellt keine zusätzlichen Spalten zur Zeilenidentifizierung bereit.
Ansatz:
Um die Zeilenidentität innerhalb jeder Name-Act-Gruppe festzulegen, verwenden wir Zeilennummern:
row_number() over (partition by name, act order by rn) as act_n row_number() over (partition by name order by rn) as rn
Diese Zeilennummern ermöglichen es uns, Zeilen innerhalb einer Gruppe zu unterscheiden und aufeinanderfolgende Handlungsbereiche zu identifizieren Werte.
Aggregation für Min und Max:
Um die gewünschte Ausgabe für jede Name-Akt-Kombination zu finden, aggregieren wir die Daten in aufeinanderfolgenden Zeilengruppen. Die Schlüsselberechnung ist die Differenz zwischen den beiden Zeilennummern:
rn - act_n diff
Diese Differenz stellt die Position innerhalb jeder Gruppe dar und ermöglicht es uns, aufeinanderfolgende Bereiche zu bestimmen.
select name, act, min(startt) startt, max(endd) endd from ( select name, act, row_number() over (partition by name order by name, startt) rn, row_number() over (partition by name, act order by name, startt) act_n, startt, endd from @t ) group by (rn - act_n), name, act order by name;
Diese Abfrage gruppiert die Daten anhand der Zeilennummerndifferenz und liefert so die gewünschte Ausgabe.
Das obige ist der detaillierte Inhalt vonWie finde ich Mindest- und Höchstwerte für aufeinanderfolgende Zeilen basierend auf bestimmten Aktwerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!