Hi,
In der Ausgabe sollen nun Einträge bei denen sich die Uhrzeit um maximal 10 Sekunden unterscheiden, nur einfach angezeigt werden.
Das wird nicht einfach. Es gibt beim Filtern mit WHERE keinen Bezug auf einen Vorgänger oder Nachfolger. Und das schon deshalb nicht, weil die Sortierung erst später stattfindet. Um also zwei Datensätze zu vergleichen, muss man joinen.
… oder eine Subquery verwenden.
Das müsste jedoch in deinem Fall um einen Datensatz versetzt stattfinden. Da die Menge jedoch unsortiert ist und vermutlich keinen fortlaufenden, garantiert lückenlosen Zähler besitzt, kannst du nicht x mit x+1 joinen sondern müsstest auf größer oder kleiner als setzen und dann aber auf 1 limitieren, was gleich gar icht beim Joinen geht.
Bei der Subquery aber schon.
Mir schwebt in etwa sowas vor:
SELECT * FROM tabelle t1
WHERE IFNULL(
TIME_TO_SEC( -- Zeit der Differenz in Sekunden umwandeln
TIMEDIFF( -- Differenz bilden
(
SELECT uhrzeit FROM tabelle t2 -- zwischen Uhrzeit des nächsten
WHERE t2.uhrzeit > t1.uhrzeit
ORDER BY uhrzeit ASC LIMIT 1
),
t1.uhrzeit -- und des aktuellen Datensatzes
)
),
11 -- oder, wenn es keinen nächsten Datensatz gibt, eine Anzahl von 11 Sekunden zurückliefern
) > 10 -- nur die Datensätze selektieren, bei denen die Differenz zum nächsten Datensatz > 10 Sekunden ist
-
In meinem Test mit ein paar Dutzend generierten Testdatensätzen scheint das auf den ersten Blick das gewünschte zu liefern.
-
IFNULL mit alternativer Auswahl von 11 Sekunden, damit es auch für den letzten Datensatz noch eine Differenz zum „Nachfolger“ gibt; Wert 11, damit er auch in der Ergebnismenge landet
-
Ob der OP noch eine Gruppierung nach seiner Spalte „kennung“ haben wollte, konnte ich aus der Fragestellung und den Beispieldaten nicht zweifelsfrei herauslesen; die müsste man ggf. noch mit einbauen beim Selektieren des jeweils „nächsten“ Datensatzes.
-
Wie das von der Performance her aussehen mag bei größeren Datenbeständen, darüber möchte ich nicht spekulieren; das war jetzt eher als “proof–of–concept” gedacht ;-)
MfG ChrisB
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?