0

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 的最旧行

4

1 回答 1

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
;
于 2013-08-12T07:07:05.977 回答