2014-02-27 105 views
1

比較假設源數據似乎象下面這樣:當前日期和以前的日期和更新目標

 
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 

假設你處理的日期是01-JAN-2014

對於這些紅塔,該起始日期,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 

含義爲同一regi_id如果STOP_DATA開始日期相同,則目標開始日期應更新爲上10

對於自從子代碼爲30的停止日期以及子代碼爲40的開始日期不相等的情況下,在regi_id 678中,我們需要將目標開始日期更新爲01-jan-2014。

自從subscrn id 50的停止日期開始,subscrn的開始日期爲60,並且subscrn id 60的停止日期與subscrn id 70的開始日期相同,我們需要將目標開始日期更新爲01如下輸出中-JAN-2012:

+0

你錯過了顯示預期的輸出? –

+0

輸出結果應如上所示顯示在第二個表中 – user3361609

回答

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子句,因爲您仍然會得到期望的結果(基於reg i_id)...

+0

這不起作用,因爲最初REGI_USERS表的開始日期和結束日期列爲null。我們需要根據來自源的regi_id更新這兩列。 – user3361609