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

lano

Well-Known Member
c-b Experte
#1
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 ?
 

dominikb

Well-Known Member
#2
Bei numerischen Signalwerten geht das mit einer korrelierten Unterabfrage. Beispiel für eine Tabelle macsignal mit den Spalten mac und signal:

SQL:
DELETE FROM macsignal
    WHERE macsignal.signal <>
        (SELECT MAX(ms.signal)
            FROM (SELECT * FROM macsignal) ms
            WHERE ms.mac = macsignal.mac);
 
Zuletzt bearbeitet:

lano

Well-Known Member
c-b Experte
#3
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 :)
 

dominikb

Well-Known Member
#4
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:

SQL:
DELETE FROM macsignal
    WHERE macsignal.time <>
        (SELECT ms1.time
            FROM (SELECT * FROM macsignal) ms1
            WHERE ms1.mac = macsignal.mac
            AND ms1.time =
                (SELECT MAX(ms2.time)
                    FROM (SELECT * FROM macsignal) ms2
                        LIMIT 1)
            ORDER BY ms1.signal DESC);
 
Zuletzt bearbeitet:

lano

Well-Known Member
c-b Experte
#5
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.
 
Oben