Frage

Ich habe eine Testtabelle, die eine, die Serie von Datenzeilen enthält, die aus einer Datendatei genommen, wo.

Jede Zeile eine Änderung in einem entfernten System zu einer Reihe Details sind die Reihen effektiv Schnappschüsse von der Quellzeile nach jeder Änderung gemacht. Jede Zeile enthält Metadaten Zeitstempel für die Erstellung und Updates.

Ich versuche jetzt ein Update-Tabelle aus diesen Daten-Dateien zu erstellen, die alle dem Update enthalten. Ich brauche einen Weg, nur die Zeile mit den neuesten „update“ Zeitstempeln halten Zeilen mit doppelten Schlüsseln zu entfernen.

Ich bin bewusst, dass ich die SSIS „sort“ verwenden kann, verwandeln Duplikate zu entfernen, indem Sie auf dem Schlüsselfeld Sortieren und sagen, es Duplikate zu entfernen, aber wie stelle ich sicher, dass die Zeile, die es hält, ist das mit dem neuesten Zeitstempel?

War es hilfreich?

Lösung

Dies entfernt Reihen mit Spiel auf Col1, Col2 usw. und eine UpdateDate haben, die nicht die neueste ist:

DELETE D
FROM   MyTable AS D
       JOIN MyTable AS T
           ON T.Col1 = D.Col1
          AND T.Col2 = D.Col2
          ...
          AND T.UpdateDate > D.UpdateDate

Wenn Col1 und Col2 werden müssen, als „passend“, wenn sie beide NULL sind dann würden Sie verwenden müssen:

       ON (T.Col1 = D.Col1 OR (T.Col1 IS NULL AND D.Col1 IS NULL))
      AND (T.Col2 = D.Col2 OR (T.Col2 IS NULL AND D.Col2 IS NULL))
      ...

Bearbeiten : Wenn Sie einen Case Sensitive Test auf einem Kasten sensible Datenbank dann auf VARCHAR und TEXT-Spalten verwenden, um:

       ON (T.Col1 = D.Col1  COLLATE Latin1_General_BIN 
           OR (T.Col1 IS NULL AND D.Col1 IS NULL))
       ...

Andere Tipps

Sie können das Sortieren in SSIS Verwandeln Sie Ihre Daten von mehr als einer Spalte sortieren. Einfach sortiert nach Primärschlüssel (oder ID-Feld), indem Sie Ihre Timestamp-Spalte gefolgt in absteigender Reihenfolge.

Sehen Sie im folgenden Artikel für weitere Details über die Art Transformation zu arbeiten?

http://msdn.microsoft.com/en-us/library /ms140182.aspx

Sinn?

Cheers, John

Ist es sinnvoll, nur die Duplikate zu ignorieren, wenn sie von Inszenierung zu Final Table zu verschieben?

Sie haben dies trotzdem zu tun, also warum eine Abfrage für die Staging-Tabelle nicht eher ausgeben als zwei?

INSERT final
    (key, col1, col2)
SELECT
    key, col1, col2
FROM
    staging s
    JOIN
    (SELECT key, MAX(datetimestamp) maxdt FROM staging ms ON s.key = ms.key AND s.datetimestamp = ms.maxdt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top