Heim >Datenbank >MySQL-Tutorial >Wie finde ich Mindest- und Höchstwerte für aufeinanderfolgende Zeilen basierend auf bestimmten Aktwerten?

Wie finde ich Mindest- und Höchstwerte für aufeinanderfolgende Zeilen basierend auf bestimmten Aktwerten?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 08:44:41380Durchsuche

How to Find Minimum and Maximum Values for Consecutive Rows Based on Specific Act Values?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn