Среднее с частичными данными в SQL

У меня есть данные, как показано ниже, которые являются частичными, и несколько строк отсутствуют. Мне нужно среднее с данными с учетом предыдущего доступного значения. У нас есть какая-либо функция для такого среднего в sql?

Необходимое среднее: 220

Доступные данные за 10 дней:

1st day: 100
4th day: 200
7th day: 300
10th day: 400

Положить то же самое в формате таблицы:

Rows    Date        Partial Continuous(needed)
1       01-Aug-18   100     100     
2                           100
3                           100
4       04-Aug-18   200     200     
5                           200
6                           200
7       07-Aug-18   300     300     
8                           300
9                           300
10      10-Aug-18   400     400     
-----------------------------------
Average             250     220
-----------------------------------

Я смотрю на что-то вроде select avg(частичное *(nextdate-date))/(lastdate-firstdate) из mytable;

2 ответа

Используйте пользовательскую переменную для заполнения пропущенных значений.

SELECT AVG(normal)
FROM (SELECT IFNULL(continuous, @prev) AS normal, @prev := IF(continuous IS NULL, @prev, continuous)
      FROM (SELECT continuous
            FROM yourTable
            ORDER BY id) AS x
      CROSS JOIN (SELECT @prev := NULL) AS y
) as z

Как насчет AVG ()?

> SELECT AVG(Normal) FROM table WHERE something;
Другие вопросы по тегам