dedlfix: Ähnliche Einträge filtern

Beitrag lesen

Hi!

Ich habe mir folgenden Workaround gebastelt:
SELECT from_unixtime(floor(unix_timestamp(uhrzeit)/(20))*(20)) AS u, uhrzeit, kennung
FROM table
GROUP BY u,kennung

Das geht syntaktisch, aber nur mit MySQL. Beachte, dass in den Datensätzen einer Gruppe unterschiedliche Werte stehen können. Wenn du nun Felder abfragst, die nicht zur Gruppierung gehören oder in Aggregatefunktionen verwendet werden, dann bekommst du die Daten eines zufälligen Datensatzes geliefert. Wenn die in den betreffenden Feldern ungleich sind, hast du den Salat. Andere DBMSe lassen sich gleich gar nicht auf dieses Spielchen ein.

Ich runde meine Uhrzeit in 20 Sekunden Schritten und sorge dann mit GROUP BY das doppelte gleiche (gerundete) Uhrzeiten nicht angezeigt werden.
Natürlich unterdrücke ich damit nicht jeden doppelten Wer, da
13:00:14 auf 13:00:00 gerundet wird und
13:00:15 auf 13:00:20 gerundet wird.
Nicht perfekt aber immerhin etwas.

Wenn du dich damit zufriedengibst, ist das in der Syntax einfacher als die Subquery- oder gar die Stored-Procedure-Lösung. Anzumerken ist nur, dass deine Rechnung bei jeder Abfrage für jeden Datensatz durchgeführt werden muss. Wenn du das öfter brauchst und eine schlechte Performance bemerkst, wäre vielleicht eine andere Lösung besser. Ich denke da an ein Kopieren der zusammengefassten Datensätze in eine weitere Tabelle. Das ist natürlich nicht mehr praktikabel, wenn die Tabelle ständig weiter gefüllt wird.

Ich würde es gerne nochmal mit Subuerys versuchen, hab damit aber leider keine Erfahrung.
Tipps in dieser Richtung würden mir also sehr helfen.

Was konkret möchtest du wissen? Für deinen Fall hat ChrisB ja schon eine Lösung vorgeschlagen.

Lo!