Pregunta

Tengo una tabla de preparación que contiene una serie de filas de datos de who que se tomaron de un archivo de datos.

Cada fila detalla un cambio en una fila en un sistema remoto, las filas son efectivamente instantáneas de la fila de origen tomadas después de cada cambio. Cada fila contiene marcas de tiempo de metadatos para la creación y las actualizaciones.

Ahora estoy intentando construir una tabla de actualización a partir de estos archivos de datos que contienen toda la actualización. Requiero una forma de eliminar filas con claves duplicadas manteniendo solo la fila con la última " actualizar " marca de tiempo.

Soy consciente de que puedo usar el SSIS " ordenar " transforme para eliminar duplicados clasificando en el campo clave e indicándole que elimine duplicados, pero ¿cómo me aseguro de que la fila que mantiene sea la que tiene la última marca de tiempo?

¿Fue útil?

Solución

Esto eliminará las filas con coincidencia en Col1, Col2, etc. y tendrá una fecha de actualización que NO es la más reciente:

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 y Col2 deben considerarse " coincidencia " si ambos son NULOS, deberá usar:

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

Editar : si necesita realizar una prueba de detección de mayúsculas y minúsculas en una base de datos sensible IN de Case , en las columnas VARCHAR y TEXT use:

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

Otros consejos

Puede utilizar la transformación de clasificación en SSIS para ordenar su conjunto de datos por más de una columna. Simplemente ordene por su clave principal (o campo de ID) seguido de su columna de marca de tiempo en orden descendente.

Consulte el siguiente artículo para obtener más detalles sobre cómo trabajar con la Transformación de clasificación?

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

¿Tiene sentido?

Saludos, John

¿Tiene sentido simplemente ignorar los duplicados cuando se pasa de la clasificación a la mesa final?

Debes hacer esto de todos modos, ¿por qué no emitir una consulta contra la tabla de preparación en lugar de dos?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top