如何更新Db2表行并删除现有行?
DB2表ZB_BILL_ERR:如何更新Db2表行并删除现有行?,db2,Db2,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 A12345
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最新一行的处理日期将具有表中账户最早的处理日期,在本例中为2013年7月14日,并删除A123456789最早的一行。要识别最新记录,请使用
row_number() over (partition by account_number
order by curr_processs_dt descending
) as aging
这将在帐户中按降序排列您的行。选择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
;
... 如果可能的话(每个id只需要一行),我首先在
A123456789
上使表唯一,然后在过程中更新或插入,或者使用MERGE
语句(如果您的DB2版本支持)。到目前为止,您尝试了什么版本的DB2?