最初に、私はstackoverflowコミュニティに不慣れで、SQL自体に比較的慣れていないので、質問を正しくフォーマットしていなかったり、要件を明確に述べていなかったりした場合は、ご容赦ください。
Oracle でタイプ 2 SCD を実装しようとしています。ソーステーブル ( customer_records
) の構造を以下に示します。
CREATE TABLE customer_records(
day date,
snapshot_day number,
vendor_id number,
customer_id number,
rank number
);
INSERT INTO customer_records
(day,snapshot_day,vendor_id,customer_id,rank)
VALUES
(9/24/2014,6266,71047795,476095,3103),
(10/1/2014,6273,71047795,476095,3103),
(10/8/2014,6280,71047795,476095,3103),
(10/15/2014,6287,71047795,476095,3103),
(10/22/2014,6291,71047795,476095,3102),
(10/29/2014,6330,71047795,476095,3102),
(11/05/2015,6351,71047795,476095,3102),
(11/12/2015,6440,71047795,476095,3103);
vendor_id
上の表は毎週更新され、 と で表される特定の顧客のレコードを取得しましたcustomer_id
。それぞれの顧客がユニークvendor_id
でcustomer_id
. 顧客の階層 ( rank
) の変更を追跡しようとしています。顧客の階層が数週間同じままである可能性があり、顧客の階層に変更があった場合にのみ追跡します.
目的の出力 (ディメンション テーブル) は次のようになります。
SK Version Date_From Date_To Vendor_id Customer_Id Rank_Id
1 1 9/24/2014 10/22/2014 71047795 476095 3103
2 2 10/22/2014 11/05/2015 71047795 476095 3102
3 3 11/05/2015 12/31/2199 71047795 476095 3103
顧客の階層が変化するたびに、新しいテーブルでそれを追跡するようにします。current_flag
また、最新の階層に = 'Y'を含めたいと考えています。
マージを使用してそれを実行できるようにしたい。