Я запускаю фильтр скользящего среднего через столбец значений по формуле:
new_values - (AVG(old_values) OVER (PARTITION BY category, subcategory ORDER BY date BETWEEN 2 PRECEDING AND 2 FOLLOWING))
Я протестировал скрипт через редактор запросов, все в порядке и Я получаю правильные результаты. Однако после того, как я сохранил и запросил его через представление, две строки, вычисленные в верхней и нижней части столбцов, несовместимы (те, где фильтр перекрывает края). Каждый раз, когда я запускаю запрос, они меняются, но ненамного.
date new_values old_values query_editor view also_view again_view
2020-01-01 0.87 0.85 0.02 0.082 0.074 0.052
2020-01-02 0.85 0.82 -0.0025 0.032 0.026 0.018
2020-01-03 0.92 0.88 0.038 0.038 0.038 0.038
2020-01-04 0.82 0.86 -0.06 -0.06 -0.06 -0.06
2020-01-05 0.94 1.0 0.056 0.056 0.056 0.056
Есть какие-либо указания на то, что может быть причиной этого? интересно, что происходит, когда в наборе данных существуют пустые строки (упорядоченные случайным образом с каждым запросом) и вносят свой вклад в оконную функцию. Например,
date new_values old_values query_editor view also_view again_view
null null 0.99 <- These would be read and ordered randomly
null null 0.12 <- giving a varied output.
2020-01-01 0.87 0.85 0.02 0.082 0.074 0.052
2020-01-02 0.85 0.82 -0.0025 0.032 0.026 0.018
2020-01-03 0.92 0.88 0.038 0.038 0.038 0.038
2020-01-04 0.82 0.86 -0.06 -0.06 -0.06 -0.06
2020-01-05 0.94 1.0 0.056 0.056 0.056 0.056
Чтобы этого не произошло, укажите слот в операторе case:
new_values - (AVG(CASE WHEN new_values IS NOT NULL THEN old_values ELSE NULL END) OVER (PARTITION BY category, subcategory ORDER BY date BETWEEN 2 PRECEDING AND 2 FOLLOWING))