У меня есть таблица 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 раз дороже, чем аналитическая форма, которую я показываю выше.