请帮助。如何完成以下操作:使用同一表中的select查询-2更新select select-1
该表包含日常交易数据。我们的目标是使用昨天的记录的计算值(那3列)来更新/插入当前日期的当日记录中的3列中的值。我还有最后40天更新基于:我的代码
trunc(sysdate)-39 = calculated value of trunc(sysdate)-40
trunc(sysdate)-38 = calculated value of trunc(sysdate)-39
trunc(sysdate)-37 = calculated value of trunc(sysdate)-36
.
.
.
.
trunc(sysdate)= calculated value of trunc(sysdate)-1.
例如:
marge into
(select trans_date, store, item, reason, col1, col2, col3
from tb1 where tb1.trans_date = trunc(sysdate)) today
using
(select trans_date, store, item, reason, col1, col2, col3
from tb1
where tb1.trans_date = trunc(sysdate-1)) yesterday
when matched then
update set
(today.col1 = yesterday.col1 + 1
today.col2 = decode(yesterday.reason,today.reason,today.col2+1,1)
today.col3 = yesterday.trans_date)
WHEN NOT MATCHED THEN
INSERT (today.col1, today.col2, today.col3)
VALUES (
1, 1,
(select max(trans_date) from tb1
where tb1.trans_date < trunc(sysdate)-1)
and tb1.store=today.store
and tb1.item=today.item);
请注意:每天记录可能有重复如下。
今天:
trans_date store item reason col1 col2 col3 ***(expected values)***
14/04/14 999 100 'short supply' - - - ==> 2,2,13/04/14
14/04/14 999 100 'short supply' - - - ==> 2,2,13/04/14
14/04/14 998 101 'Damaged' - - - ==> 2,2,11/04/14
14/04/14 990 105 'Returned' - - - ==> 2,1,13/04/14
14/04/14 995 107 'Returned' - - - ==> 1,1,14/04/14
昨天:
trans_date store item reason col1 col2 col3
13/04/14 999 100 'short supply' 1 1 13/04/14
13/04/14 999 100 'short supply' 1 1 13/04/14
13/04/14 998 101 'Damaged' 1 1 11/04/14
13/04/14 990 105 'Transferred' 1 1 13/04/14
如果它可以帮助你:每天将有约45万条记录被更新/插入。更新日常记录可以通过存储过程完成。但挑战是一次更新历史。 – user3531676