Ich habe eine Tabelle, die einen Fremdschlüssel und einen DATETIME-Zeitstempel enthält. Ich möchte alle Zeilen löschen, bei denen der Zeitstempel später als der Anfang des Tages des letzten Zeitstempels ist, aber für jeden Eintrag separat.DELETE mit GROUP BY und aggregierten Bedingungen
Logisch möchte ich etwas wie folgt aus:
DELETE FROM Entries
WHERE StartTime > CONVERT(Date,MAX(StartTime))
GROUP BY ItemId;
Aber ich kann nicht GROUP BY in einer DELETE verwenden, noch kann ich SUM() in einer WHERE-Bedingung.
Ich kann sie ein Element zu zum Zeitpunkt unter Verwendung einer Unterabfrage wie folgt löschen:
DELETE FROM Entries
WHERE [email protected]
AND StartTime > (
SELECT CONVERT(Date,MAX(StartTime)) FROM Entries
WHERE [email protected]
)
Aber ich will für alle Elemente in einer einzigen Abfrage löschen. Wie kann ich das erreichen?
@dasblinkenlight aber ich will für mehrere ItemIDs löschen. Meine obige Abfrage behandelt nur eine ItemId und wendet die Zeitstempelprüfung für jedes Element separat an. Meine obige Abfrage behandelt jeweils nur eine ItemId. – mtmacdonald
Egal, ich habe den '@ Id' Parameter in Ihrer Anfrage verpasst. Ich habe Ihre Abfrage bearbeitet, um sie zu dem zu machen, was ich bei der Eingabe meines vorherigen Kommentars dachte. – dasblinkenlight