Сгруппировать повторные предложения вместе в Postgres - PullRequest
0 голосов
/ 04 марта 2019

Можно ли как-то объединить несколько повторяющихся предложений OVER в Postgres?

Пример со сценарием CASE ... END:

   case
        when hhk = lag(hhk) over (order by hhk, product, dt)
        and product = lag(product) over (order by hhk, product, dt)
        then dt - lag(dt) over (order by hhk, product, dt)
        else null
    end as delta

Предложение over (order by hhk, product, dt) повторяется трираз.Я ищу способ как-то сгруппировать их, например, следующий (который, конечно, не работает как таковой):

    case
        -- here we combine the two conditions into one
        when [hhk, product] = lag([hhk, product]) 
            over (order by hhk, product, dt)
        -- and here we somehow recall the clause
        then dt - lag(dt) over (my_clause)
        else null
    end as delta

1 Ответ

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

Вы можете определить окно в предложении FROM.Например:

select v.*, row_number() over w
from (values (1, 2), (1, 3)) v(x, y)
     window w as (partition by x order by y)

В вашем конкретном примере я могу предположить что-то вроде этого:

select . . .
       (case when household_key = lag(household_key) over w and
                  product_id = lag(product_id) over w
        then dt - lag(dt) over w
        end) as delta
from . . .
     window w as (order by household_key, product_id, dt)
...