Использование оконной функции Last_Value в Redshift / PostgreSQL - PullRequest
0 голосов
/ 16 марта 2019

У меня следующий запрос:

select
    x.value1,
    x.value2,
    y,
    last_value(y ignore nulls)
          over (order by x.value1, x.value2 rows unbounded preceding) as val

from table t

Для следующей таблицы:

value1.x1   value2.x2    3
value1.x2   value2.x2
value1.x3   value2.x3    5
value1.x4   value2.x4
value1.x5   value2.x5
value1.x6   value2.x6    7
value1.x7   value2.x7

запрос дает вывод

value1.x1   value2.x2    3     3
value1.x2   value2.x2          3
value1.x3   value2.x3    5     5
value1.x4   value2.x4          5
value1.x5   value2.x5          5
value1.x6   value2.x6    7     7
value1.x7   value2.x7

Это правильно копирует значения до самого последнего ряда. Я не уверен, почему это не идет полностью вниз. Разве «строки без границ предшествуют» - это не правильный фрейм? Кто-то может указать на мою ошибку? Не уверен, что это применимо и к MySQL, но мне было бы интересно и такое решение.

Спасибо!

1 Ответ

0 голосов
/ 16 марта 2019

Ваш код должен делать то, что вы хотите с указанием окна.Однако альтернативный метод заключается в использовании lag():

select x.value1, x.value2, y,
       (case when y is not null then y
             else lag(y ignore nulls) over (order by x.value1, x.value2)
        end) as val
from table t;
...