Создание временной таблицы для хранения данных за час Тип для BIGINT п

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
Создание временной таблицы для хранения данных за час
Тип для X BIGINT, потому что integer не поддерживается
*/
CREATE TABLE Hourly
(
X bigint,
Y float
)
/*
Выборка данных с окном в час и приведение к виду X Y
*/
SELECT AVG(MainValue) as Y,
row_number() as X
INTO Hourly
FROM input
TIMESTAMP BY
eventtime
WHERE sensorId = 1
GROUP BY TUMBLINGWINDOW(hour, 1)
/*
X Y
------ ---------------------
1 11.49247566
2 12.22547681
3 11.75826237
4 12.5252115
. . .
21 13.85201127
22 15.28908969
23 14.71199552
24 15.20587009
Подсчет сумм для формул
*/
WITH CalcSum
AS (SELECT sum(X) as SumX,
sum(Y) as SumY,
sum(X*X) as SumXX,
sum(X*Y) as SumXY,
count(*) as N
FROM Hourly)
/*
SumX SumY SumXX SumXY N
------ ---------------- -------- ---------------- ------
300 298.3077671 4900 3838.711232 24
Расчет коэффициентов M и B
*/
WITH MBCalc
AS (SELECT (N*SumXY-SumX*SumY)/(N*SumXX-SumX*SumX) as M,
(SumY-Slope*SumX)/N as B
FROM CalcSums)
/*
M B
------------- -----------------
0.095534038 11.23531482
Расчет тренда и прогнозного значения
*/
SELECT X,
Y,
X*M + B as Trend,
MAX(X)*M + B as Forecast
FROM MBCalc, Hourly