Ich habe eine Tabelle, die absichtlich Duplikate enthält. In diesem Fall sind die Dinge, die dupliziert werden, eine deviceId und die datetime. Manchmal aktualisiert der Kunde seine Daten. Die Tabelle hat drei Spalten: deviceId, datetime und value (es gibt einen inkrementellen Primärschlüssel). Manchmal, wenn der Kunde seine Daten neu bewertet, bemerken sie, dass der Wert falsch ist, aktualisieren ihn dann und senden die Daten zur erneuten Verarbeitung. Als Konsequenz muss ich in der Lage sein, Datensätze zu löschen, die nicht die neuesten Datensätze sind. Ich kann es nicht nach Datum und Uhrzeit tun, da dies in einigen Fällen auch dupliziert wird und ich die Staging-Tabelle nicht abschneiden kann.Löschen Sie alle Datensätze, die nicht die neuesten sind
die Betrogenen löschen ich folgendes haben:
;WITH DupeData AS (
SELECT ROW_NUMBER() OVER(PARTITION BY tblMeterData_Id,fldDateTime, fldValue, [fldBatchId],[fldProcessed] ORDER BY fldDateTime) AS ROW
FROM [Stage.tblMeterData])
DELETE FROM DupeData
WHERE ROW > 1
Das Problem dabei ist es eine zufällige Duplikat zu löschen scheint.
Ich möchte die neueste Rekord halten, die in den Staging-Bereich ist und alle anderen löschen, die nicht die letzte Aufzeichnung sind. Ich kann dann die relevante Zeile mit dem neuen Wert aktualisieren, mit den neuesten Daten, wenn ich es von Staging in Prod nehme.
ist jede primäre oder eindeutigen Schlüssel auf dem Tisch ok arbeiten? DELETE FROM DupeData wobei id in (select-ID aus ( SELECT ID, ROW_NUMBER() OVER (PARTITION BY tblMeterData_Id, fldDateTime, fldValue, [fldBatchId], [fldProcessed] ORDER BY fldDateTime) AS ROW FROM [Stufe. tblMeterData]) ) q wo q.row> 1) ' – are
Nur die inkrementelle Id, die ich verwendet, um den Tisch zu senden. –
Ich denke, der Penny ist einfach gefallen! –