Я пытаюсь создать представление базы данных с Postgres, которое позволяет мне создавать агрегирование средних скоростей бегового круга гонщика. Таблица выглядит следующим образом:
id racer_id lap_time lap_speed laps_completed race_id
1 1234 33.5 160 1 1
2 1234 33.5 160 2 1
3 1234 31.25 162 3 1
4 1234 31.25 162 4 1
5 1234 29.5 165 5 1
6 1234 32 161 6 1
7 5678 35 153 1 1
8 5678 35 155 2 1
9 5678 32 158 3 1
10 5678 33.5 160 4 1
11 5678 33 159 5 1
12 5678 32 158 6 1
Используемый мной текущий запрос работает
SELECT id,
racer_id,
race_id,
laps_completed,
AVG(lap_speed)
OVER(PARTITION BY race_id ORDER BY laps_completed ROWS BETWEEN 10 PRECEDING AND CURRENT ROW) as lap_average_10
FROM laps
WHERE laps_completed >= 10
Это возвращает что-то вроде этого
id | racer_id | race_id | laps_completed | lap_average_10
-------+-----------+---------+----------------+------------------------
418 | 146182 | 2 | 10 | 172.4630000000000000
417 | 146179 | 2 | 10 | 172.5820000000000000
455 | 146203 | 2 | 10 | 165.4860000000000000
456 | 146211 | 2 | 10 | 164.1252500000000000
438 | 146193 | 2 | 10 | 164.7140000000000000
444 | 146205 | 2 | 10 | 164.9225000000000000
445 | 146200 | 2 | 10 | 164.9582857142857143
446 | 146207 | 2 | 10 | 165.0035000000000000
443 | 146196 | 2 | 10 | 165.0206666666666667
432 | 146195 | 2 | 10 | 165.5452000000000000
431 | 146184 | 2 | 10 | 165.6308181818181818
Что бы я хотел однако, это не только возврат скользящего среднего на 10 кругов, но и скользящих средних на 2, 5 и 20 кругов. Можно ли сделать это одним запросом?