当前日期和上一个日期之间的比较并更新目标

时间:2014-02-27 17:40:34

标签: sql informatica informatica-powercenter

假设源数据如下所示:

Subscrn_id    Product       start_date    Stop_date   Regi_id    Status
================================================================================
10            xyz           01-jan-2014    null               123        Active
20            xyz           01-jan-2013   01-jan-2014     456        Expired
30            xyz           01-jan-2012   01-aug-2013      678        Expired
40            abc           01-jan-2014    null                678        Active
50            xyz           01-jan-2012   01-jan-2014      910        Expired  
60            abc           01-jan-2014   05-jan-2014       910        expired
70            def           05-jan-2014       null              910        Active

假设您的处理日期是2014年1月1日

对于这些注册表,应填写start_date,stop_date,如下所示:

Regi        start_date   Stop_date
===================================
123          01-jan-2014   null
456          01-jan-2013   01-jan-2014
678          01-jan-2014   null
910          01-jan-2012   null

如果stop_data和开始日期相同,那么同一regi_id的含义应该将目标开始日期更新为上一个开始日期,

对于exi_id 678中的ex,因为subscrn id 30的停止日期和subscrn id 40的开始日期不相等,我们需要将目标开始日期更新为01-jan-2014。

在regi_id 910中,因为subscrn id 50的停止日期和subscrn的开始日期是60是相同的,并且subscrn id 60的停止日期与subscrn id 70的开始日期相同,我们需要将目标开始日期更新为01- jan-2012如下图所示:

1 个答案:

答案 0 :(得分:0)

如果我能够正确理解,那么这样的事情应该可以帮到你:

UPDATE subscrn s
   SET s.start_date =
          (SELECT stop_date
             FROM regi r
            WHERE r.regi_id = s.regi_id)
 WHERE s.start_date != (SELECT stop_date
                                      FROM regi r
                                     WHERE r.regi_id = s.regi_id)

此语句将根据regi_id更新目标表中的开始日期(仅当它们不同时。您可以省略where子句,因为您仍将获得所需的结果(基于regi_id的相同日期)...