請幫助。如何完成以下操作:使用同一表中的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