我有一个SQL Server数据库,其中有一个历史表,其中包含一个记录,每次所述记录,在另一个表中,更改
源数据表:
DataC
您可以将数据列变为行,然后使用窗口函数识别更改的值:
select dataid, time, username, col, lag_val as old_value, val as new_value
from (
select t.*, v.*,
lag(val, 1, val) over(partition by dataid, col order by time) lag_val
from mytable t
cross apply ( values ('DataA', DataA), ('DataB', DataB), ('DataC', DataC) ) v(col, val)
) t
where val <> lag_val
order by dataid, time
new_value