Рамка окна по умолчанию для LAST_VALUE
равна RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
, поэтому, если вы хотите, чтобы все строки были включены, вам нужно использовать указанное окно, т. Е. Это задокументировано в LAST_VALUE (Transact- SQL) - Использование FIRST_VALUE и LAST_VALUE в вычисленном выражении :
Требуется пункт «ДИАПАЗОН МЕЖДУ ТЕКУЩЕЙ СТРОКОЙ И НЕ ПОДКЛЮЧЕННЫМ СЛЕДУЮЩИМ» в этом примере ненулевые значения должны быть возвращены в столбце DifferenceFromLastQuarter, как показано ниже. Диапазон по умолчанию - «ДИАПАЗОН МЕЖДУ НЕПРЕДУСМОТРЕННЫМ ПРЕЦЕДИРОВАНИЕМ И ТЕКУЩЕЙ СТРОКОЙ».
В результате без ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
вы получите текущую строку с LAST_VALUE
, поскольку это последняя строка в рамка окна по умолчанию.
LEAD
, с другой стороны, не использует ROWS
или RANGE BETWEEN
, поэтому имеет доступ ко всей области набора данных. Попытка использовать ROWS BETWEEN
приведет к ошибке:
SELECT V.I,
LEAD(V.I) OVER (ORDER BY V.I ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS L
FROM (VALUES(1),(2),(3))V(I);
Функция 'LEAD' может не иметь рамки окна.