У меня есть таблица S с данными временных рядов, подобными этому:
key day delta
Для данного ключа это возможно, но маловероятно, что дни будут отсутствовать.
Я хотел бы построить кумулятивный столбец из значений дельты (положительные INT), чтобы вставить эти кумулятивные данные в другую таблицу. Вот что у меня есть на данный момент:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
В моем вкусе SQL предложение окна по умолчанию - RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, но я оставил это здесь, чтобы быть явным.
Этот запрос очень медленный, как на порядок медленнее, чем в старом неработающем запросе, в котором суммарное количество заполнялось нулями. Есть ли предложения по поводу других методов генерации кумулятивных чисел?
Я рассмотрел решения здесь: Текущий итог по сгруппированным записям в таблице
Я использую RDBM, это Vertica. Vertica SQL исключает первое решение с подвыбором, а его планировщик запросов предсказывает, что решение второго левого внешнего соединения примерно в 100 раз дороже, чем аналитическая форма, которую я показываю выше.