Функция Analyti c дает случайные результаты, но только при запросе через представление - PullRequest
0 голосов
/ 05 мая 2020

Я запускаю фильтр скользящего среднего через столбец значений по формуле:

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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...