1

最初に、私は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_idcustomer_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'を含めたいと考えています。

マージを使用してそれを実行できるようにしたい。

4

2 に答える 2