функция окна улья - изменение строки в значении - PullRequest
0 голосов
/ 16 января 2019

У меня есть данные, которые имеют поля id / flag и date Мне нужно заполнить поле flag_date ниже:

login_date      id      flag    flag_date
5/1/2018        100     N       NULL
5/2/2018        100     N       NULL
5/3/2018        100     Y       5/3/2018
5/4/2018        100     Y       5/3/2018
5/5/2018        100     Y       5/3/2018
5/6/2018        100     N       NULL
5/7/2018        100     N       NULL
5/8/2018        100     Y       5/8/2018
5/9/2018        100     Y       5/8/2018
5/10/2018       100     Y       5/8/2018

Когда значение флага изменяется с N на Y, значение flag_date изменяется соответственно. пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 января 2019
select login_date
      ,id
      ,flag
      ,case when flag = 'Y' then min(login_date) over(partition by id,grp) end as flag_date
from (select login_date,id,flag
            ,row_number() over(partition by id order by login_date) - 
             row_number() over(partition by id,flag order by login_date) as grp
      from tbl 
     ) t
  • Сначала классифицируйте строки по группам, то есть последовательно 'Y' и 'N начинают новое значение, когда серия разрывается. Это можно сделать с помощью подхода с разницей номеров строк. ( Запустите внутренний запрос, чтобы увидеть, как присваиваются номера групп )
  • Как только группы назначены, вычислять flag_date с условным агрегированием тривиально.

Еще один подход для решения этой проблемы заключается в создании новой группы всякий раз, когда встречается значение 'N'. Внешний запрос остается прежним, меняется только внутренний.

select login_date
      ,id
      ,flag
      ,case when flag = 'Y' then min(login_date) over(partition by id,grp) end as flag_date 
from (select login_date,id,flag
            ,sum(case when flag = 'N' then 1 else 0 end) over(partition by id order by login_date) as grp
      from tbl 
     ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...