искра sql получить предыдущее ненулевое значение в столбце - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь получить предыдущее значение строки столбца, только если в искре оно не равно нулю SQL. так как игнорирование пустых значений недоступно, альтернативой будет ранжирование и получение максимального значения.

lag( val ignore nulls) over ()

SELECT id, val, val_partition, MAX(val) over (partition by val_partition)
FROM (
        SELECT
            id,
            val,
            sum(case when val is null then 0 else 1 end) over (order by id rows unbounded preceding) as val_partition
          FROM base
     )

Я пытаюсь найти другой оптимизированный способ?

1 Ответ

1 голос
/ 07 февраля 2020

Ваш метод в порядке, но его можно записать более кратко, как:

SELECT id, val, val_partition,
       MAX(val) over (PARTITION BY grp)
FROM (SELECT b.*,
             COUNT(val) over (ORDER BY id) as grp
      FROM base b
     ) b;

Также обратите внимание, что пункт windowing не нужен, если id уникален.

...