У меня есть таблица с именем Races
со связанной Laps
, где я храню данные уровня гонок на гонках. Данные на круге выглядят так:
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
Я пытаюсь рассчитать, какие гонщики из каждой расы имеют максимальную и минимальную средние скорости на беговом круге (на основе среднего за 2 круга).
Сейчас у меня есть представление базы данных, которое я добавил в свои миграции:
class CreateLapAverageView < ActiveRecord::Migration[6.0]
def up
execute <<-SQL
CREATE VIEW rolling_lap_averages AS
SELECT id,
racer_id,
race_id,
laps_completed,
AVG(lap_speed)
OVER(ORDER BY laps_completed ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS lap_average_2
FROM laps
SQL
end
def down
execute("DROP VIEW rolling_lap_averages")
end
end
После выполнения необработанного запроса SQL это то, что я хочу, но теперь я Теперь я полностью уверен, как использовать это в моем приложении Rails. Во-вторых, возможно ли передать параметры представлениям базы данных в Rails? Например, вместо OVER(ORDER BY laps_completed ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
я хотел бы сделать что-то вроде OVER(ORDER BY laps_completed ROWS BETWEEN $1 PRECEDING AND CURRENT ROW)
, чтобы изменить размер окна?