Doppelte Einträge löschen mit alten Datum im mysql
Hallo!
Ich werde gerne in meiner Daten doppelte Einträge löschen. Dabei sollen nur die älteren gelöscht werden.
Ich haben ihnen eine Spalte eine Nummer (artikel) z.b 2312 und in einer anderen das Datum( preis_anfrage_vom) z.b 2018-01-07.
Jetzt würde ich gerne alle Nummer (Artikel) die gleich sind löschen bis auf den einen mit dem höchsten Datum.
Hier ein Beispiel
Nummer Datum
2312 2018-01-07
2312 2017-02-03
Da sollte nur die 2312 2017-02-03 gelöscht werden.
Ich hoffe da kann mir wer helfen.
Ich werde gerne in meiner Daten doppelte Einträge löschen. Dabei sollen nur die älteren gelöscht werden.
Ich haben ihnen eine Spalte eine Nummer (artikel) z.b 2312 und in einer anderen das Datum( preis_anfrage_vom) z.b 2018-01-07.
Jetzt würde ich gerne alle Nummer (Artikel) die gleich sind löschen bis auf den einen mit dem höchsten Datum.
Hier ein Beispiel
Nummer Datum
2312 2018-01-07
2312 2017-02-03
Da sollte nur die 2312 2017-02-03 gelöscht werden.
Ich hoffe da kann mir wer helfen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 360605
Url: https://administrator.de/contentid/360605
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
Mal so logisch gedacht, ohne jetzt die Syntax zusammenzubauen:
Arbeite mal dem max() bzw. min() Statement:
Baue dir eine "virtuelle" Tabelle, welche die Artikel und das min(date) beinhaltet.
Anschließend baust du (zum Test) eine weitere Tabelle alá Select * from Table where in (erste virtuelle Tabelle)
https://www.w3schools.com/sql/sql_in.asp
Du musst nur mal schauen, wie das läuft, wenn du quasi zwei Values benötigst. Du musst ja prüfen, ob Artikel und Datum in der virt. Tabelle "Artikel, moin ( Datum)" enthalten ist.
Gruß
em-pie
Mal so logisch gedacht, ohne jetzt die Syntax zusammenzubauen:
Arbeite mal dem max() bzw. min() Statement:
Baue dir eine "virtuelle" Tabelle, welche die Artikel und das min(date) beinhaltet.
Anschließend baust du (zum Test) eine weitere Tabelle alá Select * from Table where in (erste virtuelle Tabelle)
https://www.w3schools.com/sql/sql_in.asp
Du musst nur mal schauen, wie das läuft, wenn du quasi zwei Values benötigst. Du musst ja prüfen, ob Artikel und Datum in der virt. Tabelle "Artikel, moin ( Datum)" enthalten ist.
Gruß
em-pie
DELETE
FROM tabelle
WHERE EXISTS (
SELECT 1
FROM tabelle t1
WHERE t1.Nummer = tabelle.Nummer
AND t1.Datum > tabelle.Datum
)
Moin,
da es keine row_number() Funktion als solches gibt, kannst du dir sowas stricken:
Du erhälst dann eine Auflistung mit einer Spalte Nummerblock. 1 sollte demnach den neusten Artikeln (wegen der Sortierung) entsprechen und alles was größer 1 ist zum Löschen nachher sein.
LG
da es keine row_number() Funktion als solches gibt, kannst du dir sowas stricken:
set @row_number = 0;
set @art_number = 0;
select @row_number:=case
when @art_number = nummer then @row_number +1
else 1
end as nummerblock,
@art_number:=nummer as num,
nummer,
datum
from tabelle
where nummer is not null
order by datum desc, nummer
Du erhälst dann eine Auflistung mit einer Spalte Nummerblock. 1 sollte demnach den neusten Artikeln (wegen der Sortierung) entsprechen und alles was größer 1 ist zum Löschen nachher sein.
LG