Please help.How do I accomplish the following:
the table holds daily transaction data . The aim is to update/insert values into 3 of the columns in the current day's records using the calculated values (of those 3 columns) of yesterday's records. I have last 40 days to update based on:
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.
example of my code:
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);
please note: each day records may have duplicates as following.
today:
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
yesterday:
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