-1

トランザクション テーブルと SCD テーブルを結合して、トランザクションの日付に従って SCD からレコードを取得する方法。

Select A.id, A.trans_dt, trans_amt, B.pmt_meth
from trans1 A
left join scd1 B
  on A.id=B.id

ここで、トランザクションごとに pmt_meth を取得する必要があります。したがって、最初の 2 つのトランザクションの pmt_meth は「M」で、最後のトランザクションは「P」である必要があります。

これは結合の問題のために重複を作成していますが(私はそれを知っています)、日付を一致させる方法がわからないため、重複が作成されず、望ましい結果が得られます

create table scd1 (id integer, pmt_meth varchar (10), start_dt date, end_dt date)

Insert into scd1(1, P, '2015/06/30', '2017/05/30')
Insert into scd1(1, M, '2017/05/30', '2019/07/31')
Insert into scd1(1, P, '2019/07/31', '2050/12/31')

Create table trans1 (id integer, trans_dt date, trans_amt float)
Insert into trans1 (1, '2019/07/25', 100)
Insert into trans1 (1, '2019/07/01', 120)
Insert into trans1 (1, '2019/07/31', 50)

ここで、トランザクションごとに pmt_meth を取得する必要があります。したがって、最初の 2 つのトランザクションの pmt_meth は「M」で、最後のトランザクションは「P」である必要があります。

Select A.id, A.trans_dt, trans_amt, B.pmt_meth
from trans1 A
left join scd1 B
  on A.id=B.id

期待される結果は

id trans_dt      trans_amt    pmt_meth
1  '2019/07/25'  100            M
1  '2019/07/01'  120            M
1  '2019/07/31'  50             P
4

2 に答える 2