У меня есть таблица с именем answers
со столбцами created_at
и response
, ответом является целое число 0
(для «нет»), 1
(для «да») или 2
( для «не знаю»). Я хочу получить скользящее среднее для значений ответов, отсеивая 2 секунды для каждого дня, принимая во внимание только предыдущие 30 дней. Я знаю, что вы можете сделать ROWS BETWEEN 29 AND PRECEDING AND CURRENT ROW
, но это работает, только если у вас есть данные за каждый день, и в моем случае может не быть данных за неделю или более.
Мой текущий запрос:
SELECT answers.created_at, answers.response,
AVG(answers.response)
OVER(ORDER BY answers.created_at::date ROWS
BETWEEN 29 PRECEDING AND CURRENT ROW) AS rolling_average
FROM answers
WHERE answers.user_id = 'insert_user_id''
AND (answers.response = 0 OR answers.response = 1)
GROUP BY answers.created_at, answers.response
ORDER BY answers.created_at::date
Но это вернет среднее значение, основанное на предыдущих строках, если пользователь ответил 1
на 2018-3-30
и 0
на 2018-5-15
, скользящее среднее на 2018-5-15
было бы 0.5
вместо 0
как я хочу. Как я могу создать запрос, который будет принимать во внимание только те ответы, которые были созданы за последние 30 дней для скользящего среднего?