Как я вычисляю MySQL использования скользящего среднего значения?

Предполагая, что все статьи имеют по крайней мере одного автора:

select count(*) * 1.0 / count(distinct paper_id)
from authors;

* 1.0, чтобы избежать целочисленного деления.

5
задан Travis Beale 18 May 2009 в 20:12
поделиться

3 ответа

Это просто не в моей голове, и я уже выхожу за дверь, так что это не проверено. Я также не могу представить, что он будет очень хорошо работать с любым большим набором данных. Я подтвердил, что он, по крайней мере, работает без ошибок. :)

SELECT
     value_column1,
     (
     SELECT
          AVG(value_column1) AS moving_average
     FROM
          Table1 T2
     WHERE
          (
               SELECT
                    COUNT(*)
               FROM
                    Table1 T3
               WHERE
                    date_column1 BETWEEN T2.date_column1 AND T1.date_column1
          ) BETWEEN 1 AND 20
     )
FROM
     Table1 T1
18
ответ дан 18 December 2019 в 06:51
поделиться

Когда у меня возникла похожая проблема, я по разным причинам стал использовать временные таблицы, но это упростило задачу! То, что я сделал, с точки зрения схемы очень похоже на то, что вы делаете.

Сделайте схему чем-то вроде ID identity, start_date, end_date, value. Когда вы выбираете, выполните подвыбор среднего из предыдущих 20 на основе идентификатора идентификатора.

Делайте это только в том случае, если вы уже используете временные таблицы по другим причинам (я нажимаю одни и те же строки снова и снова для разных показателей, поэтому было полезно иметь небольшой набор данных).

1
ответ дан 18 December 2019 в 06:51
поделиться

Подход Тома Х сработает. Вы можете упростить это следующим образом, если у вас есть столбец идентификаторов:

SELECT T1.id, T1.value_column1, avg(T2.value_column1)
FROM table1 T1
INNER JOIN table1 T2 ON T2.Id BETWEEN T1.Id-19 AND T1.Id
2
ответ дан 18 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: