DB2表ZB_BILL_ERR:
PROCESS_DATE CURR_PROCESS_DT ACCOUNT_NUMBER SEQ_NUM ERROR_REASON
07/14/2013 07/14/2013 A123456789 1 Trancode Invalid
07/15/2013 07/15/2013 B987654321 1 Adjustment code invalid
07/16/2013 07/16/2013 A123456789 2 Multi Single ind invalid
预期产出:
PROCESS_DATE CURR_PROCESS_DT ACCOUNT_NUMBER SEQ_NUM ERROR_REASON
07/15/2013 07/15/2013 B987654321 1 Adjustment code invalid
07/14/2013 07/16/2013 A123456789 2 Multi Single ind invalid
A123456789最新一行的处理日期将包含表格中帐户的最早处理日期,在本例中为07/14/2013并删除A123456789的最旧行
答案 0 :(得分:0)
要识别最新记录,请使用
row_number() over (partition by account_number
order by curr_processs_dt descending
) as aging
将按帐户中的降序日期顺序对您的行进行排名。选择老化= 1的行以获取最新的行。
要获取帐户的最早日期:
select account_number, min(process_dt) as first_processed
from input
group by account_number
所以让我们把它放在一个(有点复杂的)SQL语句
中MERGE into ZB_BILL_ERR m
USING (
with g as
(
select account_number
, min(process_dt) as first_processed
from ZB_BILL_ERR
group by account_number
)
select i.*
, row_number() over (partition by account_number
order by curr_processs_dt descending
) as aging
, first_processed
from g
join ZB_BILL_ERR i on i.account_number = g.account_number
) as x
ON m.account_number = x.accout_number
WHEN MATCHED and x.aging = 1 THEN
UPDATE process_dt = x.first_processed
WHEN MATCHED and x.aging > 1 THEN
DELETE
;