Мой текущий запрос выглядит так:
select
b0 + x * b1 as trend,
date
from
(select
(n * sumxy - (sumx * sumy)) / (n * sumxx - sumx2) as b1,
(sumy * sumxx - sumx * sumxy) / (n * sumxx - sumx2) as b0,
x,
date
from
(select
sum(x) over() as sumx,
sum(x) over() * sum(x) over() as sumx2,
sum(y) over() as sumy,
y,
x,
date,
N,
sum(xx) over() as sumxx,
sum(x*y) over() as sumxy
from
(select
utilization as y,
row_number() over(order by cryear, crmonth) as x,
row_number() over(order by cryear, crmonth) * row_number() over(order by cryear, crmonth) as xx,
datefromparts(cryear, crmonth, 1) as date,
count(crmonth) over() as N
from
test) sub1
group by
x, y, date, n, xx) sub2) sub3
, который возвращает следующие результаты: (координаты y и x линии тренда) edit: может дать разные значения тренда, потому что я только что составилзначения использования в фиктивной базе данных
trend date
0.431791238486767 2017-01-01
0.430082148360641 2017-02-01
0.428373058234514 2017-03-01
0.426663968108388 2017-04-01
Необработанные данные в тестовой таблице выглядят следующим образом
cryear | crmonth | utilization value
2017 | 01 | 0,43
2017 | 02 | 0,45
2017 | 03 | 0,52
2017 | 04 | 0,48
и т. д.и т. д.
Я не знаю, способен ли созданный мной алгоритм прогнозировать значения тренда в течение месяцев, когда значение использования еще не известно.
Например, значение использования отсутствуетна 2017-05 гг. могу ли я как-то изменить скрипт для расчета значения тренда для него?Я на самом деле застрял и не могу придумать ничего полезного.
Пустая база:
create table test
(
CRYEAR SMALLINT,
CRMONTH SMALLINT,
UTILIZATION FLOAT(24)
);
Insert into test (cryear, crmonth, utilization)
values ('2017', '01', '0.43'), ('2017', '02', '0.45'),
('2017', '03', '0.52'), ('2017', '04', '0.48');
Заранее спасибо и извините за длинный пост