Werbung

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[MySQL] Doppelte Einträge je nach Spaltenwert löschen

Dieses Thema im Forum "SQL - Structured Query Language" wurde erstellt von lano, 11. Mai 2018.

  1. lano

    lano Well-Known Member c-b Experte

    Moin.

    Kann ich Irgendwie Doppelte Einträge anhand eines Wertes Löschen?

    Ich hab eine Tabelle mit (MAC/Signal)
    Ich hab doppelte Einträge der MAC und will
    den besten Eintag behalten mit dem besten Signal.

    Geht das Irgendwie ?
  2. coding-board

    coding-board Member

    Werbung
  3. dominikb

    dominikb Member

    Bei numerischen Signalwerten geht das mit einer korrelierten Unterabfrage. Beispiel für eine Tabelle macsignal mit den Spalten mac und signal:

    Code (SQL):
    Quelltext kopieren
    1. DELETE FROM macsignal
    2.     WHERE macsignal.signal <>
    3.         (SELECT MAX(ms.signal)
    4.             FROM (SELECT * FROM macsignal) ms
    5.             WHERE ms.mac = macsignal.mac);
    Zuletzt bearbeitet: 11. Mai 2018
  4. lano

    lano Well-Known Member c-b Experte

    Ok. Da bin ich momentan raus. Das krieg ich nich hin.
    Denn ma Komplett:
    Tabelle ist im Grunde so:

    time/mac/signal

    Jetzt gibt das Doppelte Einträge bei der MAC, weil ich zu unterschiedlichen Zeiten gemessen habe und welche doppelt gefunden wurden.
    Ich will das Beste Signal. Soweit Gut.
    Wenn jetzt ein Signalpegel bei mehreren zB -70 ist dann soll er den neusten Eintrag nehmen.
    Ich hoffe du verstehst wie ich das meine. Aber scheint ja so :)
  5. dominikb

    dominikb Member

    In dem Fall reicht dann die Signalstärke als eindeutiges Kriterium für das Löschen wohl nicht mehr aus. Der Datensatz, der die maximale Signalstärke hat, die bei der MAC auftrat, muss eindeutig sein.

    Ist bei dir der Timestamp der Primärschlüssel bzw. ist er eindeutig? Falls ja:

    Code (SQL):
    Quelltext kopieren
    1. DELETE FROM macsignal
    2.     WHERE macsignal.TIME <>
    3.         (SELECT ms1.TIME
    4.             FROM (SELECT * FROM macsignal) ms1
    5.             WHERE ms1.mac = macsignal.mac
    6.             AND ms1.TIME =
    7.                 (SELECT MAX(ms2.TIME)
    8.                     FROM (SELECT * FROM macsignal) ms2
    9.                         LIMIT 1)
    10.             ORDER BY ms1.signal DESC);
    Zuletzt bearbeitet: 11. Mai 2018
  6. lano

    lano Well-Known Member c-b Experte

    Ist bei dir der Timestamp der Primärschlüssel bzw. ist er eindeutig? Falls ja:

    Ja ne.
    Guckst du: Screenshot_20180511_143139.png

    Es kann Zeilen geben die sind komplett gleich. die brauch ich nicht, bis halt auf eine.

    Den Timestamp gibt es öffter, für jedes Netz was zu der Zeit gefunden wird.
    Eigentlich ist die Mac eindeutig, bzw es soll nur eine Mac bleiben von den doppelten und zwar die mit dem besten Signal.
    Soweit war ja schon.
    Damit jetzt möglich aktuelle scann bleiben möchte ich dann für den Fall das eine mac zu unterschiedlichen Zeiten mit zwei mal dem selben Signalpegel in der Tabelle ist, den Eintrag behalten der am neusten ist.
Die Seite wird geladen...
Ähnliche Themen - [MySQL] Doppelte Einträge Forum Datum
[MySQL] Frage zu Primary Key bei autoinkrement SQL - Structured Query Language Donnerstag um 15:54 Uhr
[MySQL] Zeitdifferenz SQL - Structured Query Language 8. März 2012
unterschiedliche Konfiguration? [MySQL] SQL - Structured Query Language 3. November 2010
[mySQL] JOIN und COUNT(*)?? SQL - Structured Query Language 27. November 2009
[MySQL] Suche eine bestimmte suchfunktion SQL - Structured Query Language 18. November 2009