2009-03-06 8 views
1

J'ai une table intermédiaire qui contient une série de lignes de données qui provient d'un fichier de données.Supprimer un doublon d'un fichier intermédiaire

Chaque ligne détaille une modification d'une ligne dans un système distant, les lignes sont effectivement des instantanés de la ligne source prises après chaque modification. Chaque ligne contient des horodatages de métadonnées pour la création et les mises à jour.

J'essaye maintenant de construire une table de mise à jour à partir de ces fichiers de données qui contiennent toute la mise à jour. J'ai besoin d'un moyen de supprimer des lignes avec des clés en double en ne conservant que la ligne avec le dernier horodatage "mise à jour". Je suis conscient que je peux utiliser la transformation «tri» SSIS pour supprimer les doublons en triant sur le champ clé et en lui disant de supprimer les doublons, mais comment puis-je m'assurer que la ligne qu'il garde est celle avec le dernier horodatage ?

Répondre

0

Cela supprimera les lignes avec match sur Col1, Col2 etc et ont une UpdateDate qui est pas la plus récente:

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 

Si Col1 et Col2 doivent être considérés comme « correspondant "si elles sont à la fois NULL alors vous devez utiliser:

 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)) 
     ... 

Modifier: Si vous avez besoin de faire un cas test sensible sur une base de données sensibles cas IN puis sur les colonnes VARCHAR et TEXT utiliser:

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

Vous pouvez utiliser la transformation de tri dans SSIS pour trier votre ensemble de données par plusieurs colonnes. Il suffit de trier par votre clé primaire (ou champ ID) suivi de votre colonne timestamp dans l'ordre décroissant.

Consultez l'article suivant pour plus d'informations sur le tri par transformation.

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

sens?

Cheers, John

0

Est-il judicieux d'ignorer les doublons lors du passage de la mise en scène à la table finale?

Vous devez quand même faire cela, alors pourquoi ne pas émettre une requête sur la table de transfert au lieu de deux?

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 
Questions connexes