Redshift SQL - текущая сумма с использованием неограниченного прохождения и следования - PullRequest
0 голосов
/ 16 апреля 2020

Когда мы используем оконную функцию для вычисления промежуточной суммы, например SUM(sales) over (partition by dept order by date), если мы не указываем диапазон / окно, по умолчанию используется значение между неограниченной исходящей и текущей строкой , в основном из первая строка до текущей строки?

Согласно это делает c, похоже, так, но я хотел проверить еще раз.

Спасибо!

1 Ответ

0 голосов
/ 19 апреля 2020

Проблема, с которой вы сталкиваетесь, заключается в том, «что движок базы данных предполагает в неоднозначных обстоятельствах?» Я сталкивался с этим случаем и раньше, когда портировал с SQLserver на Redshift - сервер SQL предполагает, что вы заказываете, но не указываете рамку, которую вы хотите, чтобы она была неограниченной перед текущей строкой. Другие БД не делают того же самого предположения - если вы не укажете фрейм, он будет неограниченным, предшествующим неограниченному следующему, и все же другие будут выдавать ошибку, если вы укажете и "упорядочить по", но не укажете фрейм. Итог - не позволяйте механизму БД угадывать, что вы хотите, указывайте c.

Гордон прав, что это основано на строках, а не на диапазонах. Если вам нужна текущая сумма по дате (не по строке), вы можете сгруппировать по дате и запустить оконную функцию - windows выполнить после группировки в одном запросе.

...