Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更新Db2表行并删除现有行?_Db2 - Fatal编程技术网

如何更新Db2表行并删除现有行?

如何更新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

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最新一行的处理日期将具有表中账户最早的处理日期,在本例中为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?