2017-07-27 5 views
1

Ich hoffe, dass jemand mit dieser kniffligen Frage helfen:Gruppe von benachbarten Zeitwert

Wie kann ich „GROUP BY“ einige Zeilen, die einen konfigurierbaren benachbarten Abstand zwischen den Zeitstempeln haben?

Beispieltabelle

ID  | Value | When 
1  | 5  | 2017-06-30 11:45:55 
2  | 9  | 2017-06-30 11:45:56 
3  | 0  | 2017-06-30 11:45:59 
4  | 2  | 2017-06-30 11:46:02 
5  | 7  | 2017-06-30 17:19:22 
6  | 7  | 2017-06-30 17:19:22 
7  | 3  | 2017-06-30 17:19:22 
8  | 6  | 2017-06-30 17:19:22 

Wunschergebnis:

ID  | Value | When 
3  | 0  | 2017-06-30 11:45:59 
7  | 3  | 2017-06-30 17:19:22 

Das Ergebnis soll benachbarte Einträge finden (im Beispiel zwei Gruppen zu je vier Zeilen pro Stück) und den niedrigsten "Value" sagen. Benachbarte Entfernung kann einen Wert von 1 Minute oder 10 Minuten haben.

Ich habe versucht, das Datum neu zu formatieren, um "GROUP BY" ohne Sekunden, aber dies wird nicht für das erste Ergebnis funktionieren.

Meine MySQL-Programmierkenntnisse sind begrenzt, aber es könnte mit folgenden Schritten erfolgen:

  1. SELECT und ORDER BY „Wenn“
  2. Go obwohl Werte und sagen Differenz zwischen aktuellen und früheren „Wenn“ Wert, wenn innerhalb des Bereichs, dann GROUP, wenn keine neue Zeile ausgegeben wird.

Irgendeine Idee?

+0

Möglicherweise würde es funktionieren, wenn wir eine Variable wie "last_when" (immer aus der vorherigen Zeile) und GROUP BY so lange wie (HAVING?) "TIMESTAMPDIFF (ZWEIT, wann, last_when)

Antwort

0

Schließlich entschied ich mich, ein C-Programm zu schreiben, das eine Ansicht in der DB verwendet, um rohe sortierte Daten zu erhalten. Das Programm gibt dann Gruppen aus, wenn die Differenz zwischen den Zeitstempeln innerhalb der gewünschten Grenze liegt. Die Ausgabe wird dann in die Datenbank zurückgelegt.

Verwandte Themen