Накопительные скидки какие есть считают накопление за последние N дней. Тут по надобности надо было считать накопление за предыдущий месяц и при покупках более 3'000 переводить в другую группу (с 3% на 5%). Сделано в виде запуска заданием пакетного файла. Получилось вот так: (если кто может оптимизировать, буду рад увидеть вариант)
discount.cmd:
set nls_lang=american_america.cl8mswin1251
set oracle_sid=DB2000
svrmgrl.exe @discount.sql
discount.sql:
connect internal/qqq@DB2000;
update smdiscpers set cardtype=1 where cardtype>1;
commit;
update smdiscpers set cardtype=2, lastchange=sysdate where code in
(select b.code
from
supermag.smdiscpers B,
supermag.smactivityclient H,
where
(cardtype=1) AND
(b.CODE = h.CODE) and
(h.createdat>=(last_day(sysdate-80)+1)) and
(h.createdat<(last_day(last_day(sysdate-80)+1)))
group by
B.code
having sum(h.sumsale)>=3000);
commit;
exit;