比较两个连续的行,并将第一行更新为teradata中的下一行

时间:2014-11-14 12:25:54

标签: teradata

有人可以帮我解决这个问题吗?

我需要比较下面给定表的连续行,并用第二行字段更新第一行字段。

MBR     JOIN DT     FIELD1  FIELD2  FIELD3  OPEN_DT     CLOS_DT      LLKEY      UPD_LLKEY
12345   2014-07-30  D       UNK     S       2014-07-31  **2014-08-24**  715700024   **721200013**
12345   2014-09-11  D       UNK     UNK     **2014-09-13**  2014-10-01  **718600061**   735800004
12345   2014-09-29  D       UNK     UNK     2014-10-01  8888-12-31  735800004   735800004

这里不得比较两个连续的行(first_line.CLOS_DT和second_line.OPEN_DT),如果它不匹配则需要使用second_line..OPEN_DT更新first_line.CLOS_DT,UPD_LLKEY使用第二行的LLKEY。并且所需的输出是

MBR     JOIN DT     FIELD1  FIELD2  FIELD3  OPEN_DT     CLOS_DT     LLKEY       UPD_LLKEY
12345   2014-07-30  D       UNK     S       2014-07-31  **2014-09-13**  715700024   **718600061**
12345   2014-09-11  D       UNK     UNK     **2014-09-13**  2014-10-01  **718600061**   735800004
12345   2014-09-29  D       UNK     UNK     2014-10-01  8888-12-31  735800004   735800004

任何帮助都将受到高度赞赏.. :)

谢谢, Apmsa

1 个答案:

答案 0 :(得分:0)

将此保存到新表Tempo

SELECT  mb_r
,join_dt
,open_dt
,close_dt

,COALESCE(MAX(open_dt) OVER (PARTITION BY mb_r  ORDER BY open_dt ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING), close_dt) A2

FROM TEMP2

现在从速度表

更新temp2表
UPDATE temp2 C1
  FROM (SELECT  mb_r
    ,join_dt
    ,open_dt
    ,close_dt
    ,A2 from tempo) D1
   SET close_dt = d1.A2
 WHERE C1.mb_r = d2.mb_r
and c1.join_dt=d2.join_dt;

您还可以以与上述查询类似的方式添加您需要更新的其他库存。