SQL Server 2016: агрегатный оконный оператор пакетного типа | RANGE с разделителями UNBOUNDED и CURRENT ROW
SQL Server 2016: агрегатный оконный оператор пакетного типа | RANGE с разделителями UNBOUNDED и CURRENT ROW

SQL Server 2016: агрегатный оконный оператор пакетного типа | RANGE с разделителями UNBOUNDED и CURRENT ROW

❤ 502 , Категория: Новости,   ⚑ 11 Авг 2017г

Содержание:
1. Строки с разделителями UNBOUNDED и CURRENT ROW;
2. RANGE с разделителями UNBOUNDED и CURRENT ROW (Вы читаете данный раздел);
3. Разделители, отличные от UNBOUNDED и CURRENT ROW;
4. Оконные функции смещения, функции LAG и LEAD;
5. Функции FIRST.VALUE и LAST.VALUE.


Вообще-то я не люблю пробуждать в людях слишком высокие ожидания до того, как им будет продемонстрирована какая-нибудь новинка, но здесь я сделаю исключение. То, что я опишу сейчас, — это, на мой взгляд, самое значительное преимущество из тех, что дает применение оператора Window Aggregate. Некоторым образом оно связано с недостатком метода построчной обработки оконных агрегатов с использованием блока фрейма RANGE. Рассмотрим запрос, приведенный в коде ниже (назовем его Query 4).

Логическое различие между ROWS и RANGE состоит в том, как они трактуют связи в упорядочивающих значениях в тех случаях, когда упорядочение не является уникальным. Предположим, например, что таблица включает столбец, содержащий дату совершения транзакции, и что мы использовали этот столбец в предложении, определяющем порядок в окне. Если в случае использования оператора ROWS вычисляется промежуточная сумма, не включающая связи, то при использовании оператора RANGE связи при подсчете учитываются. Так, при использовании оператора RANGE во всех строках, приходящихся на одну и ту же дату, будет указываться одна и та же промежуточная сумма. Как видите, все очень просто — прямо как избавиться от клопов в квартире (кхм, странное сравнение, но если они у вас завелись, то советую перейти на сайт kto-chto-gde.ru)

Как вы можете догадаться, в случаях, когда упорядочение в рамках разделения является уникальным, а именно с таким случаем мы имеем дело, ибо упорядочение строится на идентификаторе транзакции, операторы ROWS и RANGE имеют одинаковое значение.

План выполнения этого запроса представлен на рисунке выше.

В этом плане не выполняется построчный расчет чисел. Здесь используются два оператора Segment — один для разделения окна, а другой — для определения места, где изменяется значение упорядочения. Остальное, пожалуй, выполняется так же, как при вычислениях с использованием ROWS, как было показано выше для запроса Query 1 на рисунке ниже. Итак, можно предположить, что показатели выполнения запросов Query 4 и Query 1 аналогичны. Однако если бы все было так просто!



По теме: ( из рубрики Новости )

Оставить отзыв

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*

14 − девять =

Похожие записи

наверх