ClickHouse/docs/ru/sql-reference/aggregate-functions/reference/exponentialmovingaverage.md
2022-08-26 13:37:11 -04:00

10 KiB
Raw Blame History

slug sidebar_position
/ru/sql-reference/aggregate-functions/reference/exponentialmovingaverage 108

exponentialMovingAverage

Вычисляет экспоненциальное скользящее среднее за определенный промежуток времени.

Синтакис:

exponentialMovingAverage(x)(value, timestamp)

Каждой точке timestamp на временном отрезке соответствует определенное значение value. Период полураспада — временной интервал х, через который вес значений уменьшается в 2 раза. Функция возвращает взвешенное среднее: чем старше временная точка, тем c меньшим весом считается соответствующее ей значение.

Аргументы

  • value — входные значения. Integer, Float или Decimal.
  • timestamp — параметр для упорядочивания значений. Integer, Float или Decimal.

Параметры

Возвращаемые значения

Тип: Float64.

Пример

Исходная таблица:

┌──temperature─┬─timestamp──┐
│          95  │         1  │
│          95  │         2  │
│          95  │         3  │
│          96  │         4  │
│          96  │         5  │
│          96  │         6  │
│          96  │         7  │
│          97  │         8  │
│          97  │         9  │
│          97  │        10  │
│          97  │        11  │
│          98  │        12  │
│          98  │        13  │
│          98  │        14  │
│          98  │        15  │
│          99  │        16  │
│          99  │        17  │
│          99  │        18  │
│         100  │        19  │
│         100  │        20  │
└──────────────┴────────────┘

Запрос:

SELECT exponentialMovingAverage(5)(temperature, timestamp);

Результат:

┌──exponentialMovingAverage(5)(temperature, timestamp)──┐
│                                    92.25779635374204  │
└───────────────────────────────────────────────────────┘

Запрос:

SELECT
    value,
    time,
    round(exp_smooth, 3),
    bar(exp_smooth, 0, 1, 50) AS bar
FROM
(
    SELECT
        (number = 0) OR (number >= 25) AS value,
        number AS time,
        exponentialMovingAverage(10)(value, time) OVER (Rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS exp_smooth
    FROM numbers(50)
)

Результат:

┌─value─┬─time─┬─round(exp_smooth, 3)─┬─bar────────────────────────────────────────┐
│     1 │    0 │                0.067 │ ███▎                                      │
│     0 │    1 │                0.062 │ ███                                        │
│     0 │    2 │                0.058 │ ██▊                                       │
│     0 │    3 │                0.054 │ ██▋                                       │
│     0 │    4 │                0.051 │ ██▌                                        │
│     0 │    5 │                0.047 │ ██▎                                       │
│     0 │    6 │                0.044 │ ██▏                                       │
│     0 │    7 │                0.041 │ ██                                         │
│     0 │    8 │                0.038 │ █▊                                        │
│     0 │    9 │                0.036 │ █▋                                        │
│     0 │   10 │                0.033 │ █▋                                        │
│     0 │   11 │                0.031 │ █▌                                         │
│     0 │   12 │                0.029 │ █▍                                        │
│     0 │   13 │                0.027 │ █▎                                        │
│     0 │   14 │                0.025 │ █▎                                        │
│     0 │   15 │                0.024 │ █▏                                        │
│     0 │   16 │                0.022 │ █                                          │
│     0 │   17 │                0.021 │ █                                          │
│     0 │   18 │                0.019 │ ▊                                         │
│     0 │   19 │                0.018 │ ▊                                         │
│     0 │   20 │                0.017 │ ▋                                         │
│     0 │   21 │                0.016 │ ▋                                         │
│     0 │   22 │                0.015 │ ▋                                         │
│     0 │   23 │                0.014 │ ▋                                         │
│     0 │   24 │                0.013 │ ▋                                         │
│     1 │   25 │                0.079 │ ███▊                                      │
│     1 │   26 │                 0.14 │ ███████                                    │
│     1 │   27 │                0.198 │ █████████▊                                │
│     1 │   28 │                0.252 │ ████████████▌                              │
│     1 │   29 │                0.302 │ ███████████████                            │
│     1 │   30 │                0.349 │ █████████████████▍                        │
│     1 │   31 │                0.392 │ ███████████████████▌                       │
│     1 │   32 │                0.433 │ █████████████████████▋                    │
│     1 │   33 │                0.471 │ ███████████████████████▌                   │
│     1 │   34 │                0.506 │ █████████████████████████▎                │
│     1 │   35 │                0.539 │ ██████████████████████████▊               │
│     1 │   36 │                 0.57 │ ████████████████████████████▌              │
│     1 │   37 │                0.599 │ █████████████████████████████▊            │
│     1 │   38 │                0.626 │ ███████████████████████████████▎          │
│     1 │   39 │                0.651 │ ████████████████████████████████▌          │
│     1 │   40 │                0.674 │ █████████████████████████████████▋        │
│     1 │   41 │                0.696 │ ██████████████████████████████████▋       │
│     1 │   42 │                0.716 │ ███████████████████████████████████▋      │
│     1 │   43 │                0.735 │ ████████████████████████████████████▋     │
│     1 │   44 │                0.753 │ █████████████████████████████████████▋    │
│     1 │   45 │                 0.77 │ ██████████████████████████████████████▍   │
│     1 │   46 │                0.785 │ ███████████████████████████████████████▎  │
│     1 │   47 │                  0.8 │ ███████████████████████████████████████▊  │
│     1 │   48 │                0.813 │ ████████████████████████████████████████▋ │
│     1 │   49 │                0.825 │ █████████████████████████████████████████▎│
└───────┴──────┴──────────────────────┴────────────────────────────────────────────┘