Ich bin relativ neu in SQL und konnte nicht finden, was ich falsch mache. Ich versuche, Zeilen mit übereinstimmenden Feldern in 2 bestimmten Spalten mit anderen Zeilen in derselben Tabelle für eine temporäre Tabelle zu löschen, so dass nur eine Zeile mit der gleichen ID und dem gleichen Jahr zurückbleibt, so dass die verbleibende Zeile die mit der ist MAX-Datum für diese IDs in diesem Jahr.SQL-Zeilen werden nicht aus der Tabelle gelöscht, wenn sie nicht vorhanden sind, und wählen unterschiedliche Unterabfragen
My table:
ID Year Date
----------------------------------------------------
1 2017 01/05/2017
1 2017 11/17/2017
1 2017 08/07/2017
1 2016 03/22/2017
1 2016 04/01/2017
2 2017 03/12/2017
2 2016 02/03/2016
2 2016 04/19/2016
Wunschergebnisse:
ID Year Date
----------------------------------------------------
1 2017 11/17/2017
1 2016 04/01/2016
2 2017 03/12/2017
2 2016 04/19/2016
Was ich habe:
DELETE FROM #Temp
WHERE NOT EXISTS (
SELECT DISTINCT
t1.ID,
t1.Year
FROM #Temp AS t1,
#Temp AS t2
WHERE t1.ID = t2.ID
AND t1.Year <> t2.Year
GROUP BY t1.ID, t1.Year)
Wenn ich es laufen, wird nichts gelöscht, aber wenn ich die ersten beiden Zeilen zu testen, zu entfernen, was gelöscht werden würde , die Ergebnisse sind korrekt, also bin ich wirklich verwirrt. Ich arbeite an der MAX-Funktion, möchte aber, dass dieser Teil zuerst funktioniert.
Jede Hilfe würde sehr geschätzt werden! Ich habe keine Ahnung, was daran falsch sein könnte.
ich den MySQL-Tag entfernt habe, weil es aussieht wie Sie SQL-Server verwenden. Basiert auf der Verwendung der Syntax #table. –
Ihre exisives-Klausel ist nicht mit der äußeren Abfrage korreliert - sie gibt immer Zeilen zurück und daher ist "nicht vorhanden" immer falsch. Im Allgemeinen ist die Verwendung von "distinct" oft ein Hinweis darauf, dass die Abfrage logisch fehlerhaft ist. Hier dient es überhaupt keinem Zweck. Wie die anderen geschrieben haben, lernen Sie, Fensterfunktionen zu verwenden. – SMor