Среднее с частичными данными в 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;