我有一张记录客户初始额度的表。 和一张记录客户额度变化的流水表,这张表只有额度变化了才有记录。怎么用这两张表做拉链表呢 并没有每天的全量数据
我有一张记录客户初始额度的表。 和一张记录客户额度变化的流水表,这张表只有额度变化了才有记录。怎么用这两张表做拉链表呢 并没有每天的全量数据
首先拉链表必要要有主键,通过主键进行关联,对比增量数据和存量数据是否一致。
区别于全量拉链,你的需求可以换个角度去实现:
第三步逻辑可以参考我们部落的拉链表文章http://www.hainiubl.com/topics/75543,step2和step3
@犀牛
--变化数据
SELECT
cod_cust_id
,amt_credit_new
,dat_create
FROM (
SELECT
cod_cust_id
,amt_credit_new
,dat_create
,ROW_NUMBER()
OVER (PARTITION BY cod_cust_id,SUBSTRING(dat_create,1,10) ORDER BY dat_create DESC ) AS rn--如果客户在同一天多次申请通过,则取日期最大那次
FROM thai_dw.snap_cmisdb_cmis_card_limit_change
WHERE flg_status_apply =8
)
WHERE rn =1
;
--没有发生变化的数据
SELECT
p2.cod_cust_id
,p2.amt_credit
,p2.dat_create
FROM (
SELECT
cod_cust_id
,amt_credit_new
FROM (
SELECT
cod_cust_id
,amt_credit_new
,dat_create
,ROW_NUMBER()
OVER (PARTITION BY cod_cust_id,SUBSTRING(dat_create,1,10) ORDER BY dat_create DESC ) AS rn--如果客户在同一天多次申请通过,则取日期最大那次
FROM thai_dw.snap_cmisdb_cmis_card_limit_change
WHERE flg_status_apply =8
)
WHERE rn =1
) p1
RIGHT JOIN (
SELECT
cod_cust_id
,amt_credit
,dat_create
FROM thai_dw.snap_cmisdb_cmis_card_apply
WHERE flg_status_apply =8
) p2
ON p1.cod_cust_id = p2.cod_cust_id
WHERE p1.cod_cust_id IS NULL
;
我以数据创建时间dat_create作为starttime,什么为endtime呢?没有发生变化的数据mark都是i,发生变化的数据mark都是u可以吗?因为不会有数据被删除
可以修改mark,再加一个case逻辑。在我们的样例里i是包含了iu两种情况的。
如果发生了变化,针对闭环的那条数据的endtime就是batchdate;
如果发生了变化,针对最新那条数据的endtime就是maxdate,比如29991231或者30000101;