Если мы хотим как-то изменить количество строк, в рамках которых мы считаем накопительную сумму. Эти границы можно контролировать следующими способами:
Накопительная сумма считается по строкам до текущей строки:
sum(quantity) over (partition by productname order by date
rows between {СТРОК ДО ТЕКУЩЕЙ СТРОКИ}
and {СТРОК ДО ТЕКУЩЕЙ СТРОКИ / ТЕКУЩАЯ СТРОКА})
Накопительная сумма считается после текущей строки:
sum(quantity) over (partition by productname order by date
rows between {СТРОК ПОСЛЕ ТЕКУЩЕЙ СТРОКИ / ТЕКУЩАЯ СТРОКА}
and {СТРОК ДО ТЕКУЩЕЙ СТРОКИ})
Рассмотрим выражения для контроля строк:
n PRECEDING
- N строк до текущей строкиCURRENT ROW
- текущая строкаUNBOUNDED PRECEDING
- все строки до текущейUNBOUNDED FOLLOWING
- все строки до текущейn FOLLOWING
- N строк после текущей строкиКак видите, первый пример, где мы использовали только сортировку можно написать еще и так:
sum(quantity) over (partition by productname order by date
rows between UNBOUNDED PRECEDING and CURRENT ROW) as quantity_sale
Рассчитаем для каждого продукта накопительную сумму реализации товара за все предыдущие дни, не включая текущий:
sum(quantity) over (partition by productname order by date
rows between UNBOUNDED PRECEDING and 1 PRECEDING)
Рассчитаем для каждого продукта накопительную сумму реализации товаров за 5 предыдущих дней, не включая текущий:
sum(quantity) over (partition by productname order by date
rows between 5 PRECEDING and 1 PRECEDING)