2013-05-22 101 views
0

我的要求是挑HIST_START值其中status="CANCELLED" AND table="OUTCOME_STATUS"。 把这个值放在HIST_END列中,其中table=("DOC_STATUS" OR "ENTRY_STATUS") AND HIST_END is NULL 例如,第一行和第二行应该有HIST_END12/06/2012(这是最后一排的HIST_START。提前根据另一行另一列的值填充值为空列

ID   HIST_START HIST_END Appl Number code version STATUS TABLE 
10298337 4/06/2012     1    I45  1 PENDING  DOC_STATUS 
10298337 4/06/2012     1    I45  1 PENDING  ENTRY_STATUS 
10298337 4/06/2012 5/06/2012 1    I45  1 PENDING  OUTCOME_STATUS 
10298337 5/06/2012 11/06/2012 1    I45  1 ADM_REV  OUTCOME_STATUS 
10298337 11/06/2012 11/06/2012 1    I45  1 BAMERROR  OUTCOME_STATUS 
10298337 11/06/2012 12/06/2012 1    I45  1 AWAIT_DOCS OUTCOME_STATUS 
10298337 12/06/2012    1    I45  1 CANCELLED OUTCOME_STATUS 

谢谢..

+0

格式化可能会更好一点.. –

+1

如果有多个具有此要求的HIST_START值,该怎么办? – Heavy

回答

0

我相信,状态=“取消”和表=“OUTCOME_STATUS”将举一个每个ID列在此表 但对于安全方面,我使用MAX()而获取hist_start列值

那么你可以使用下面的更新语句做你的工作 - 。

UPDATE Table_Name t_1 
    SET Hist_End = (SELECT MAX(t_2.Hist_Start) 
        FROM Table_Name t_2 
        WHERE t_2.Status = 'CANCELLED' 
         AND t_2."TABLE" = 'OUTCOME_STATUS' 
         AND t_2.Id = t_1.Id) 
WHERE t_1."TABLE" IN ('DOC_STATUS', 'ENTRY_STATUS') 
    AND t_1.Hist_End IS NULL; 
+0

感谢您的快速响应。 Pratik你的解决方案对我来说非常适合。 – Harry

+0

@ user2134171 ..不客气.. :) –

+0

嗨再次,代码工作正常的示例数据,但当我试图在完整的数据(200万行)实现查询运行速度非常慢(几乎不断更新年龄)。内部查询的where子句中使用的其他列是... t1.id = t2.id和t1.cd = t2.cd和t1.ver = t2.ver和t1.seq = t2.seq和t1.appl = t2 =申请桌上没有索引。在创建索引时我应该使用哪些列,如果索引在这种情况下确实是一个问题,或者导致性能下降的其他原因。请咨询... – Harry

相关问题