私は非常によく似た質問をしましたhereしかし、私はより多くの事前照会が今必要です。状況は、私たちは約2万の顧客レコードを持っています。顧客は更新して、新しいレコードを作成するだけです。実際にどのレコードが更新されたかを正確にトレースすることはできません。今度はold ID
フィールドを追加しました。正確な古いレコードをフィールドに追加します。今度はそれが一度更新されれば、それは私の古い質問に気を配り、私はそれを行うことができます。問題は、レコードが3回以上更新された場合、最も古いレコードが最新のレコードにどのようにホップされたかを正確に知る必要があります。これについては、私たちはセットルールを持っていませんが、一般的に私はcustomer start date
に従っています(そして、ID自体が最初に記録されたライトを投げます)、今はcustomer start date
を使用してすべてのレコードを設定します。私はここにテストケースを含めました。レコードのoldIDを再帰的に更新します
create table #customer (
id int not null primary key identity,
cust_no varchar(12),
meter_no varchar(10),
startdate smalldatetime,
enddate smalldatetime,
oldid int null
)
insert into #customer values('AA111222','1111','2008-01-01', '2008-03-01',null)
insert into #customer values('AA111222','1111','2009-02-01', '2009-05-01',null)
insert into #customer values('AA111222','1111','2008-03-01', '2008-12-01',null)
insert into #customer values('AA111222','1111','2009-05-01', '2009-07-01',null)
insert into #customer values('AA111222','1111','2009-08-01', '2009-11-01',null)
insert into #customer values('AA111222','1111','2010-01-01', '2010-04-01',null)
insert into #customer values('AA111222','1111','2010-07-01', '2011-07-01',null)
insert into #customer values('AA111222','1111','2011-03-01', '2011-07-01',null)
insert into #customer values('AA111222','1111','2011-07-01', '2012-07-01',null)
-- I want this result in the last column
id cust_no meter_no startdate enddate oldid
---- ------------ ---------- -------------- -------------- -------
1 AA111222 1111 2008-01-01 2008-03-01 base
2 AA111222 1111 2009-02-01 2009-05-01 3
3 AA111222 1111 2008-03-01 2008-12-01 1
4 AA111222 1111 2009-05-01 2009-07-01 2
5 AA111222 1111 2009-08-01 2009-11-01 4
6 AA111222 1111 2010-01-01 2010-04-01 5
7 AA111222 1111 2010-07-01 2011-07-01 6
8 AA111222 1111 2011-03-01 2011-07-01 7
9 AA111222 1111 2011-07-01 2012-07-01 8
私は何かを学ぶことができますので、私は何かを学ぶことができます。これまでのところ、CTE、Join、Cursorを見てきましたが、私が最初にそれをやり遂げることができるのであれば、それを行うにはしばらく時間がかかります。
正確に結果がわかりません。ペーストしたテーブルのクエリを行いますか?または特定の列? – chris
ああ、すべてのフィールドを忘れる。投稿した出力では、すべてのcolumsnはオリジナルです。変更/更新したい唯一の列はOLDIDです。残りはクエリの一部です。 *そこにいる必要はありません。 –
@Thecrocodilehunter「古い」がどのように満たされているのか、私は理解していません。規則なしで何かを割り当てることは不可能です。あなたはどのようにあなたの模範をしましたか? –