Может ли снежинка выполнить условную оконную функцию или как-нибудь обойти эту интересную проблему? - PullRequest
0 голосов
/ 21 мая 2019

типичный запрос снежинки, использующий оконную функцию, не очень сложен, например, я хочу посчитать для каждого пользователя на каждую дату, сколько единиц в последних 3 записях (исключая текущую строку), которые упорядочены по дате.Я просто абстрагируюсь от этой проблемы, изначально это могло быть исследование погашения предложения с 0/1, указывающим, погашено или нет, и я хочу видеть каждые 3 раза счет погашения, исключая дату в запросе.Использование работающего окна может служить этой цели, в основном мы рассмотрим 01-01, 02-01 и 03-01 для 04-01, и так далее

user_id | reward_status | date
1001       1              2018-01-01
1001       0              2018-02-01
1001       0              2018-03-01
1001       1              2018-04-01
1002 ...

Мой простой запрос выглядит следующим образоми для 2018-04-01 это дает мне 1 (01-01 - 1, в то время как 02-01 и 03-01 - 0)

select
user_id,
date,
coalesce(
sum(reward_status) over (
 partition by user_id
 order by date
 rows between 3 preceding and 1 preceding
  ), 0) as total_ones

from tables

Однако, есть такой случай, обратите внимание наВ следующем примере есть два дня с 2018-03-01.И используя тот же запрос выше, хотя мы используем «1 перед», второй 2018-03-01 будет считать первый 2018-03-01, в основном смещение 1 не удалит текущую дату запроса, как я надеюсь

user_id | reward_status | date
1001       1              2018-01-01
1001       0              2018-02-01
1001       0              2018-03-01
1001       1              2018-03-01

В этой конкретной строке мы хотим перейти на две строки выше, то есть изменить запрос с «3 предшествующих и 1 предшествующий» на «4 предшествующих и 2 предшествующих», но это ввело условное окно для каждой строки, как дляпервые 3 строки у нас есть 1 предшествующая, а 4-я строка, которую мы хотим 2, предшествующая

Однако, похоже, оконная функция может принимать только константу для аргумента смещения.Есть ли снежинка какой-то функциональности, которая может сделать эту работу?по сути, я хочу, чтобы в каждой строке был подвижный сегмент окна, но подвижное смещение является условным аргументом (для этого аргумента я могу легко сгенерировать дополнительный столбец, но, насколько я тестировал, размер / смещение окна может быть только константой).

Спасибо.

...