MySQL GROUP BY DateTime mit einer Genauigkeit von /- 3 Sekunden
Problemstellung
Gegeben Eine Tabelle mit Spalten für ID, Zeitstempel und Titel. Ziel ist es, Datensätze zu gruppieren, die innerhalb von 3 Sekunden auftreten. In diesem Szenario würden Zeilen mit den Zeitstempeln 15:00:00 und 15:00:02 gruppiert.
Lösung
Anstatt die Anfänge von Ketten basierend zu identifizieren Konzentrieren wir uns bei einzelnen Zeilen auf die Verkettung von Zeitstempeln.
Abfrage 1: Zeitstempel für den Kettenstart ermitteln
<code class="mysql">SELECT DISTINCT Timestamp FROM Table a LEFT JOIN Table b ON (b.Timestamp >= a.Timestamp - INTERVAL 3 SECONDS AND b.Timestamp < a.Timestamp) WHERE b.Timestamp IS NULL
Diese Abfrage gibt Zeitstempel zurück, über denen sich keine Zeitstempel befinden 3 Sekunden, was die Anfänge von Ketten angibt.
Abfrage 2: Datensätze mit Kettenstart-Zeitstempeln verknüpfen
<code class="mysql">SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime FROM Table JOIN ([query #1]) StartOfChains ON Table.Timestamp >= StartOfChains.TimeStamp GROUP BY Table.id</code>
Für jede Zeile identifiziert diese Abfrage die größte Kette -Startzeitstempel (tritt vor dem Zeitstempel der Zeile auf).
Endgültige GROUP BY-Operation
<code class="mysql">SELECT COUNT(*) --or whatever FROM Table JOIN ([query #2]) GroupingQuery ON Table.id = GroupingQuery.id GROUP BY GroupingQuery.ChainStartTime</code>
Diese Abfrage verwendet die GroupingQuery-Tabelle aus Abfrage 2, um Datensätze basierend auf zu gruppieren die ChainStartTime-Spalte, die aggregierte Berechnungen innerhalb jeder Zeitgruppe ermöglicht.
Das obige ist der detaillierte Inhalt vonWie erreicht man bei der Arbeit mit DateTime-Daten in MySQL eine GROUP BY-Genauigkeit von /- 3 Sekunden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!