ich so (SQL2008) eine Tabelle haben:von streichen größer als 1 zählen, aber eine Reihe halten
id url updated
1 http://url1.com null
2 http://url2.com <datetime>
3 http://url1.com <datetime>
ich eine der url1.com Datensätze löschen möchten (vorzugsweise aktualisiert, wenn nicht null wenn es funktioniert nicht auf diese Weise arbeiten, aber seine Ordnung)
ich habe diese Abfrage, die alle Duplikate löscht - aber nicht halten eine Aufzeichnung (das ist, wo ich bin verwirrt):
DELETE FROM [table] WHERE url IN (
SELECT url
FROM [table]
GROUP BY url
HAVING COUNT(*) > 1)
Wie beschränke ich das Löschen? Ergebnis würde im Idealfall sein:
id url updated
1 http://url1.com null
2 http://url2.com <datetime>
Gerade jetzt es endet wie:
id url updated
2 http://url2.com <datetime>
Was ist das für eine Zauberei? Ich habe die Bestellung einfach umgedreht und danach gesucht. Wo kann ich mehr über diese Abfrage erfahren? – user2124871
Froh, es hat funktioniert. der 'CTE' (allgemeiner Tabellenausdruck) ist eigentlich nicht notwendig, Sie könnten auch eine abgeleitete Tabelle verwenden, aber ich denke, dass dieser Code viel sauberer ist. 'ROW_NUMBER()' ist eine analytische Windowing-Funktion, und sie sind sehr nützlich für viele Dinge, also lohnt es sich, sie nachzuschlagen – Lamak
@Lamak, Sie brauchen nicht das * im CTE – Anon