假设源数据如下所示:
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如下图所示:
答案 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的相同日期)...