Я пытаюсь создать представление, показывающее 10-минутную скользящую среднюю, где поле скользящей средней возвращает значение NULL для первых 10 минут данных.
Проблемы, с которыми я сталкиваюсь:
1. Как командной строке, так и клиентам HeidiSQL не хватает памяти (они не исчерпывают мою системную память, это должно быть программным ограничением).
2. Когда я добавляю предложение LIMIT, запрос выполняется, нозначения не увеличиваются правильно (т. е. номер строки всегда равен 1, дата / время всегда являются первой датой / временем в таблице и т. д.).
В таблице 604 800 строк и 2 столбца.
Системные характеристики:
Процессор Intel® Core ™ (TM) i5-3570K CPU @ 3,40 ГГц, 3401 МГц, 4 ядра (-ей), 4 логических процессора (-ов)4,4 ГГц) Установленная физическая память (ОЗУ) 16,0 ГБ
Оператор SQL:
CREATE VIEW moving_average
AS
WITH cte_rawdata AS
(SELECT
date_time, wind_speed
FROM raw_data),
cte_MA10m AS
(SELECT
date_time, wind_speed,
ROW_NUMBER() OVER(ORDER BY date_time ASC) AS rn,
AVG(wind_speed) OVER(ORDER BY date_time ASC ROWS BETWEEN 599 PRECEDING AND CURRENT ROW) AS MA10m
FROM raw_data)
SELECT
rn, rd.date_time, rd.wind_speed,
IF(rn > 599, MA10m, NULL)
FROM raw_data rd, cte_rawdata, cte_MA10m;
Вывод должен выглядеть следующим образом (плюс номер строки, не показан):
rn datetime windspeed MA10m
"1" "2018-08-23 00:00:01" "5.37" "5.370000"
"2" "2018-08-23 00:00:02" "5.36" "5.365000"
"3" "2018-08-23 00:00:03" "5.37" "5.366667"
"4" "2018-08-23 00:00:04" "5.34" "5.360000"
"5" "2018-08-23 00:00:05" "5.01" "5.290000"
"6" "2018-08-23 00:00:06" "5.00" "5.241667"
"7" "2018-08-23 00:00:07" "5.35" "5.257143"
"8" "2018-08-23 00:00:08" "5.73" "5.316250"
"9" "2018-08-23 00:00:09" "5.37" "5.322222"
"10" "2018-08-23 00:00:10" "5.35" "5.325000"
Но вместо этого я получаю это:
rn datetime windspeed MA10m
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
"1" "2018-08-23 00:00:01" "5.37" \N
Примечание: \ N - правильный результат для этих данных.
Кто-нибудь знает, как я могу решить эти проблемы?
ОБНОВЛЕНИЕ: Согласно комментарию Гордонса, я обновил последние операторы FROM, добавив в них JOINS, которые фиксировали столбцы даты-времени и скорости ветра, но все еще могут 'доберись до работы.
FROM
raw_data AS rd
LEFT JOIN cte_rawdata ON rd.date_time = cte_rawdata.date_time
LEFT JOIN cte_MA10m ON rd.date_time = cte_rawdata.date_time