es posible, pero no con una función incorporada, tengo miedo. Tendría que reconstruir la línea de tiempo a mano.
Dado que las tablas de seguimiento de cambios ofrecen el tran_end_time, que es el momento en que el valor de la propiedad debe percibirse como persistente, debería realizar una consulta que recupere todos los períodos distintos de estados de tabla, únase a la propiedad rastreada cambia y luego pivota (para tener una presentación en la misma forma que la tabla). No te olvides de unirte al estado de la tabla para obtener los valores que no se han modificado/rastreado para ver si están completos.
El resultado definitivo, simplificado, debe ser similar
RN PK PropA PropB FromDate ToDate
1 1 'Ver1' 'Ver1' 2012-01-01 09:00 2012-01-02 08:00
2 1 'Ver1' 'Ver2' 2012-01-02 08:00 2012-01-03 07:00
3 1 'Ver2' 'Ver2' 2012-01-03 07:00 *getdate()*
4 2 'Ver1' 'Ver1' 2012-01-01 05:00 2012-01-02 06:00
5 2 'Ver1' 'Ver2' 2012-01-02 06:00 2012-01-03 01:00
6 2 'Ver2' 'Ver2' 2012-01-03 01:00 *getdate()*
nota de que el getdate() es válida si la fila no se ha eliminado en cuyo caso debe ser sustituida por la fecha de eliminación
EDITAR, para los 2 casos de uso. El primer punto es fácilmente dirigido que es una cuestión de construir el gráfico de objetos temporal y filtrando a continuación:
declare @pointInTime datetime = '20120102 10:00';
select * from Reconstructed_TG where FromDate <= @pointInTime and @pointInTime < ToDate
el segundo punto, se pueden generar fácilmente con la cláusula Excepto, como usted señala. dada la consulta anterior:
declare @pointInTimeA datetime = '20120102 10:00';
declare @pointInTimeB datetime = '20120103 01:00';
select * from Reconstructed_TG where FromDate <= @pointInTimeA and @pointInTimeA < ToDate
EXCEPT
select * from Reconstructed_TG where FromDate <= @pointInTimeB and @pointInTimeB < ToDate
todavía la cláusula except
solamente presenta las filas que tienen al menos un valor de columna diferente; No sé si esa información es realmente significativa para el ojo humano. Dependiendo de sus necesidades, una consulta que funcione directamente en los datos cdc
puede ser más apropiada.
¿qué quiere decir con que quiere calcular la diferencia? ejemplo de salida? – Jaguar
@Jaguar: se agregaron dos casos de uso. ¡Gracias! – Legend