我有一種情況,在過去的某個時間點,表中的某些記錄被修改爲具有重複的信息。如何從日誌中獲取以前的值
考慮下面的例子:
create table #CustomerExample
(
CustomerRecordId int,
CustomerId int,
CustomerName varchar(255),
CurrentCustomerValue varchar(255)
);
create table #CustomerExampleLog
(
LogId int,
CustomerRecordId int,
CustomerId int,
LogCreateDate datetime,
NewCustomerValue varchar(255)
);
insert #CustomerExample
values
(1, 100, 'Customer 1', 'Value X'),
(2, 100, 'Customer 1', 'Value X'),
(3, 200, 'Customer 2', 'Value Z'),
(4, 200, 'Customer 2', 'Value Z'),
(5, 200, 'Customer 2', 'Value Z');
insert #CustomerExampleLog
values
(1, 1, 100, '1/1/2014', 'Value B'),
(2, 1, 100, '2/1/2014', 'Value C'),
(3, 1, 100, '3/1/2014', 'Value B'),
(4, 1, 100, '4/1/2014', 'Value X'),
(5, 1, 100, '5/1/2014', 'Value X'),
(6, 1, 100, '6/1/2014', 'Value X'),
(7, 2, 100, '1/1/2014', 'Value D'),
(8, 2, 100, '2/1/2014', 'Value E'),
(9, 2, 100, '3/1/2014', 'Value F'),
(10, 2, 100, '4/1/2014', 'Value G'),
(11, 2, 100, '5/1/2014', 'Value X'),
(12, 2, 100, '6/1/2014', 'Value X'),
(13, 3, 200, '1/2/2014', 'Value A'),
(14, 3, 200, '1/3/2014', 'Value A'),
(15, 3, 200, '1/4/2014', 'Value B'),
(16, 3, 200, '1/5/2014', 'Value Z'),
(17, 4, 200, '1/2/2014', 'Value A'),
(18, 4, 200, '1/3/2014', 'Value A'),
(19, 4, 200, '1/4/2014', 'Value Z');
最初 「客戶1」 和 「客戶2」 CustomerValue
柱具有不同的值在[#CustomerExample]表中的每個記錄。然而,由於缺乏適當的唯一約束,一堆「壞」的UPDATE語句導致了重複的信息。更新記錄到[#CustomerExampleLog]表中,該表僅包含更新記錄的標識,更新日期和新值。我的目標是重新記錄日誌條目並將其中一個副本恢復爲它的「最後已知的好」價值,然後它變成了一個騙局。
理想情況下,我想將其中一個隱藏的CurrentCustomerValue還原爲以前的值。在上面的例子中,CustomerRecordId = 1的LogId = 3,CustomerRecordId = 3的LogId = 15。
我完全難住了。
我知道我在使用RANK()和其他東西讓自己太複雜:)謝謝,這正是我所需要的! – Chahk