create table sales (
item varchar2(10)
, day date
, qty number
)
Table created.
insert into sales
select
'Item' as item
, date '2019-01-01' - level as day
, 200 - trunc(level/7) + trunc(17*dbms_random.value) - mod(level, 5) as qty
from dual
connect by level <= 500
500 row(s) inserted.
commit
Statement processed.
select *
from (
select
item
, day
, qty
, regr_slope(qty, day - date '2000-01-01') over (
partition by item
order by day
range between interval '12' month preceding and current row
) as slope
from sales
)
where day between date '2018-12-01' and date '2018-12-31'
order by day
ITEM | DAY | QTY | SLOPE | Item | 01-DEC-18 | 207 | .1455830224365779797595351020130934599398 | Item | 02-DEC-18 | 206 | .14578213505758907291474810172978324627 | Item | 03-DEC-18 | 208 | .1462816911233341757171939928444284262332 | Item | 04-DEC-18 | 199 | .14578262457847662323596558912920965017 | Item | 05-DEC-18 | 204 | .1460770713923381414482842598841915960278 | Item | 06-DEC-18 | 210 | .1460888198936393491575039574704252896281 | Item | 07-DEC-18 | 212 | .1464881465576585236906693035525142710636 | Item | 08-DEC-18 | 196 | .145933274631620234590647336302685450399 | Item | 09-DEC-18 | 194 | .1450522594142515439794743891850150313508 | Item | 10-DEC-18 | 203 | .1447399450879944390427174283509693431425 | Item | 11-DEC-18 | 206 | .1449516628718599529692807286028890298981 | Item | 12-DEC-18 | 201 | .1448823956662715825170062615840528780463 | Item | 13-DEC-18 | 200 | .1443974028469311017707806206023432141085 | Item | 14-DEC-18 | 201 | .1439885305256046959738742702314393566227 | Item | 15-DEC-18 | 196 | .1437021608063877580616441415669930751151 | Item | 16-DEC-18 | 202 | .1436735238344660642704211287005484469644 | Item | 17-DEC-18 | 206 | .1434974186951698362124300367568996439347 | Item | 18-DEC-18 | 197 | .143353989075117592095706228724963301231 | Item | 19-DEC-18 | 205 | .1431089838708986563263537853120481492745 | Item | 20-DEC-18 | 200 | .1428510063631596370447379258143332939677 | Item | 21-DEC-18 | 208 | .1431182847677621124294860459011498233747 | Item | 22-DEC-18 | 201 | .1429703270795000278415004794245192445958 | Item | 23-DEC-18 | 203 | .1428103761294929603836864716619417702666 | Item | 24-DEC-18 | 206 | .1430414299884167119983405241912044110727 | Item | 25-DEC-18 | 210 | .1428555344313694775159996842590275300428 | Item | 26-DEC-18 | 210 | .1431477784012370192828396617165906583505 | Item | 27-DEC-18 | 211 | .143201992839533217357676391203064890277 | Item | 28-DEC-18 | 209 | .1436010747431086167302329935854406697625 | Item | 29-DEC-18 | 200 | .1429573547759799443292370633397195412455 | Item | 30-DEC-18 | 209 | .1431515721881155342722751890621452885756 | Item | 31-DEC-18 | 202 | .1431099629126737569687887601109009570745 |
---|
select
item
, day + 31 as forecast_day
, qty + 31 * slope as forecast_qty
from (
select
item
, day
, qty
, regr_slope(qty, day - date '2000-01-01') over (
partition by item
order by day
range between interval '12' month preceding and current row
) as slope
from sales
)
where day between date '2018-12-01' and date '2018-12-31'
order by forecast_day
ITEM | FORECAST_DAY | FORECAST_QTY | Item | 01-JAN-19 | 211.513073695533917372545588162405897258 | Item | 02-JAN-19 | 210.519246186785261260357191153623280634 | Item | 03-JAN-19 | 212.534732424823359447233013778177281213 | Item | 04-JAN-19 | 203.519261361932775320314933263005499155 | Item | 05-JAN-19 | 208.528389213162482384896812056409939477 | Item | 06-JAN-19 | 214.528753416702819823882622681583183978 | Item | 07-JAN-19 | 216.541132543287414234410748410127942403 | Item | 08-JAN-19 | 200.523931513580227272310067425383248962 | Item | 09-JAN-19 | 198.496620041841797863363706064735465972 | Item | 10-JAN-19 | 207.486938297727827610324240278880049637 | Item | 11-JAN-19 | 210.493501549027658542047702586689559927 | Item | 12-JAN-19 | 205.491354265654419058027194109105639219 | Item | 13-JAN-19 | 204.476319488254864154894199238672639637 | Item | 14-JAN-19 | 205.463644446293745575190102377174620055 | Item | 15-JAN-19 | 200.454766984998020499910968388576785329 | Item | 16-JAN-19 | 206.453879238868447992383054989717001856 | Item | 17-JAN-19 | 210.448419979550264922585331139463888962 | Item | 18-JAN-19 | 201.443973661328645354966893090473862338 | Item | 19-JAN-19 | 209.436378499997858346116967344673492628 | Item | 20-JAN-19 | 204.428381197257948748386875700244332113 | Item | 21-JAN-19 | 212.436666827800625485314067422935644525 | Item | 22-JAN-19 | 205.432080139464500863086514862160096582 | Item | 23-JAN-19 | 207.427121660014281771894280621520194878 | Item | 24-JAN-19 | 210.434284329640918071948556249927336743 | Item | 25-JAN-19 | 214.428521567372453802995990212029853431 | Item | 26-JAN-19 | 214.437581130438347597768029513214310409 | Item | 27-JAN-19 | 215.439261778025529738087968127295011599 | Item | 28-JAN-19 | 213.451633317036367118637222801148660763 | Item | 29-JAN-19 | 204.431677998055378274206348963531305779 | Item | 30-JAN-19 | 213.437698737831581562440530860926503946 | Item | 31-JAN-19 | 206.436408850292886466032451563437929669 |
---|
drop table sales purge
Table dropped.