Я хочу вычислить скользящее среднее в таблице и отслеживать время начала каждого вычисленного фрейма окна.
Моя проблема в том, что я ожидаю уменьшения количества результатов по сравнению со строками в таблице. Но мой запрос возвращает тот же номер строки. Я думаю, что понимаю, почему это не работает, но я не знаю, какое средство правовой защиты.
Допустим, у меня есть таблица с примерами данных, которая выглядит следующим образом:
+------+-------+
| Tick | Value |
+------+-------+
| 1 | 1 |
| 2 | 3 |_
| 3 | 5 |
| 4 | 7 |_
| 5 | 9 |
| 6 | 11 |_
| 7 | 13 |
| 8 | 15 |_
| 9 | 17 |
| 10 | 19 |_
+------+-------+
Я хочу вычислить среднее значение для каждого n-го элемента, например, из двух строк (см. отметки выше), чтобы получить результат:
+--------------+--------------+
| OccurredTick | ValueAverage |
+--------------+--------------+
| 1 | 2 |
| 3 | 6 |
| 5 | 10 |
| 7 | 14 |
| 9 | 18 |
+--------------+--------------+
Я пробовал это с
SELECT
FIRST_VALUE(Tick) OVER (
ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
) OccurredTick,
AVG(Value) OVER (
ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
) ValueAverage
FROM TableName;
Что Я получаю взамен это:
+--------------+--------------+
| OccurredTick | ValueAverage |
+--------------+--------------+
| 1 | 2 |
| 2 | 4 |
| 3 | 6 |
| 4 | 8 |
| 5 | 10 |
| 6 | 12 |
| 7 | 14 |
| 8 | 16 |
| 9 | 18 |
| 10 | 19 |
+--------------+--------------+