Heim >Datenbank >MySQL-Tutorial >Wie finde ich minimale und maximale Zeitintervalle für aufeinanderfolgende Ereignisse mit Lücken und Inseln?
Minimum und Maximum für aufeinanderfolgende Zeilen mit Lücken und Inseln ermitteln
Im Kontext eines geordneten Datensatzes, der Sequenzen von Ereignissen enthält, die durch Zeilen in dargestellt werden In einer Tabelle besteht die Aufgabe darin, die minimalen und maximalen Zeitintervalle für aufeinanderfolgende Zeilen zu bestimmen, die denselben Ereignistyp aufweisen. Dieses Problem entsteht beim Umgang mit Daten mit Lücken und Inseln, wodurch herkömmliche Aggregationsmethoden unzureichend sind.
Verstehen der Eingabe
Die Eingabetabelle besteht aus den folgenden Spalten:
Identifizieren aufeinanderfolgender Gruppen
Um aufeinanderfolgende Gruppen von Zeilen zu identifizieren Bei gleichem Ereignistyp berechnen wir die Differenz zwischen den Zeilennummern für den Ereignistyp und der Gesamtzeile Nummerierung:
row_number() over (partition by name, act order by rn) as seqnum_na row_number() over (partition by name order by rn) as seqnum_n
Diese neuen Spalten, seqnum_na und seqnum_n, repräsentieren die Sequenznummer für den Ereignistyp bzw. die Gesamtsequenznummer. Durch Subtrahieren von seqnum_na von seqnum_n wird eine neue Spalte erstellt, die die Gruppennummer für jede aufeinanderfolgende Teilmenge von Zeilen innerhalb eines Ereignistyps darstellt.
Aggregation mit Gruppennummer
Mit der Gruppennummer identifiziert, können wir die Start- und Endzeiten aggregieren, um das Minimum und Maximum für jede Gruppe zu ermitteln:
select name, act, min(startt) as startt, max(endd) as endd from (select i.*, row_number() over (partition by name, act order by rn) as seqnum_na, row_number() over (partition by name order by rn) as seqnum_n from input i ) i group by (seqnum_n - seqnum_na), name, act;
Nach Durch die Gruppierung nach dieser Gruppennummer zusammen mit dem Namen und dem Ereignistyp identifizieren und aggregieren wir effizient die aufeinanderfolgenden Zeilen innerhalb jeder Teilmenge und liefern so die gewünschten minimalen und maximalen Zeitintervalle.
Das obige ist der detaillierte Inhalt vonWie finde ich minimale und maximale Zeitintervalle für aufeinanderfolgende Ereignisse mit Lücken und Inseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!