SQL-Statement SQL Statement doppelte Einträge finden

lara99

Mitglied
Hallo!
Folgendes Schema hat meine SQL Datenbank

1613461418487.png

ich möchte nun bei allen Trades, wo Name und Pair gleich sind, nur den neuesten Trade behalten (nach der Zeit), die anderen Trades sollen deleted werden.

Ich kann den neusten Trade so finden: SELECT preis FROM Trades WHERE name='%s' AND pair='%s' ORDER BY zeit DESC LIMIT 1; aber ich weiß nicht wie ich das in das delete Statement tu.

Ich hoffe ihr könnt mir helfen ☺️ VG Lara
 
Du kannst alle nicht zutreffenden Datensätze mit NOT IN finden:

(nur so aus dem gedächtnis, ich habe 3 Jahre kein SQL mehr gemacht)

[CODE lang="sql" title="SELECT"]
SELECT *

FROM Trades

WHERE ID NOT IN(

SELECT id FROM Trades WHERE name='%s' AND pair='%s' ORDER BY zeit DESC LIMIT 1

)
[/CODE]

Wenn das Ergebnis dem gewünschten entspricht (manuell kontrollieren)


[CODE lang="sql" title="DELETE"]
DELETE

FROM Trades

WHERE ID NOT IN(

SELECT id FROM Trades WHERE name='%s' AND pair='%s' ORDER BY zeit DESC LIMIT 1

)
[/CODE]
 
Das geht mit nem kleinen Trick recht einfach

Java:
SELECT DISTINCT(id)
FROM Trades a   
INNER JOIN trades b ON (a.name = b.name AND a.pair = b.pair AND  a.zeit < b.zeit)
 
Ersetze SELECT durch DELETE:

SQL:
DELETE a 
FROM Trades a   
INNER JOIN trades b ON (a.name = b.name AND a.pair = b.pair AND  a.zeit < b.zeit)
 

Neue Themen


Zurück
Oben