Heim >Datenbank >MySQL-Tutorial >Wie finde ich minimale und maximale Start- und Endwerte in aufeinanderfolgenden Teilmengen identischer Aktwerte?

Wie finde ich minimale und maximale Start- und Endwerte in aufeinanderfolgenden Teilmengen identischer Aktwerte?

Barbara Streisand
Barbara StreisandOriginal
2024-12-22 12:36:14252Durchsuche

How to Find Minimum and Maximum startt and endd Values within Consecutive Subsets of Identical act Values?

Mindest- und Höchstwerte aufeinanderfolgender Zeilenteilmengen

Suche nach einer Abfrage, die Start- und Endwerte innerhalb aufeinanderfolgender Teilmengen identischer Aktwerte identifiziert und aggregiert, Diese Frage befasst sich mit Datenmanipulations- und Aggregationstechniken.

Um dieses Problem anzugehen, können wir Folgendes verwenden Schritte:

  1. Eindeutige Zeilennummern zuweisen:
    Partitionieren Sie die Daten nach Namen und weisen Sie jedem Aktwert innerhalb jeder Namensgruppe fortlaufende Zeilennummern zu. Dadurch können wir aufeinanderfolgende Zeilen unterscheiden.
  2. Zeilenunterschiede berechnen:
    Berechnen Sie die Differenz zwischen den Zeilennummern für jeden Akt (d. h. rn - act_n). Diese Differenz stellt die Position des Aktwerts innerhalb der aufeinanderfolgenden Teilmenge dar.
  3. Gruppierung nach aufeinanderfolgenden Aktpositionen:
    Aggregieren Sie die Daten unter Verwendung der Zeilendifferenz als Gruppierungsschlüssel. Dadurch werden Zeilen gruppiert, die zur gleichen aufeinanderfolgenden Teilmenge gehören.
  4. Minimum und Maximum ermitteln:
    Berechnen Sie innerhalb jeder gruppierten Teilmenge die minimalen und maximalen Werte von startt und endd. Dies liefert die gewünschte Ausgabe.

Die folgende Abfrage implementiert diesen Ansatz:

with cte as (
  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 input
)
select
    name
    ,act
    ,min(startt) startt
    ,max(endd)   endd
    ,min(rn)     min_rn
    ,max(rn)     max_rn
from cte
group by 
    name
    ,act
    ,rn - act_n
order by 
    name
    ,min(rn)

Das obige ist der detaillierte Inhalt vonWie finde ich minimale und maximale Start- und Endwerte in aufeinanderfolgenden Teilmengen identischer Aktwerte?. 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