Источник Таблица DDL: -Как назначить счетчик на основе условия
CREATE TABLE temp (
REG_ID NUMBER(5) ,
Pkg_DES VARCHAR2(15),
PRD_DESC VARCHAR2(15)
EVENT_DATE DATE,
event_type_cd VARCHAR2(15)
)
У меня есть вставки заявления тоже ниже -
insert into temp (REG_ID, Pkg_DES, PRD_DESC, EVENT_DATE, event_type_cd)
select 1 , 'CC' , 'trail' , to_date('12/12/2016', 'mm/dd/yyyy') , 'new sub' from dual union all
select 1 , 'CC' , 'trail' ,to_date('12/13/2016', 'mm/dd/yyyy') , 'exp' from dual union all
select 1 , 'CC' , 'PAID' , to_date('12/14/2016', 'mm/dd/yyyy') , 'upsell' from dual union all
select 1 , 'CC' , 'PAID' , to_date('12/15/2016', 'mm/dd/yyyy'), 'exp' from dual union all
select 1 , 'CC' , 'PAID' , to_date('12/16/2016', 'mm/dd/yyyy') , 'renewal' from dual union all
select 1 , 'CC' , 'PAID' , to_date('12/17/2016', 'mm/dd/yyyy') , 'renewal' from dual union all
select 1 , 'aa' , 'trail' , to_date('12/12/2016', 'mm/dd/yyyy') , 'new sub' from dual union all
select 1 , 'aa' , 'trail' , to_date('12/13/2016', 'mm/dd/yyyy') , 'exp' from dual union all
select 1 , 'aa' , 'PAID' , to_date('12/14/2016', 'mm/dd/yyyy') , 'renewal' from dual union all
select 1 , 'aa' , 'PAID' , to_date('12/15/2016', 'mm/dd/yyyy') , 'renewal' from dual union all
select 1 , 'aa' , 'PAID' , to_date('12/16/2016', 'mm/dd/yyyy') , 'upsell' from dual union all
select 1 , 'aa' , 'PAID' , to_date('12/17/2016', 'mm/dd/yyyy') , 'renewal' from dual;
У меня есть требование, как это ниже
REG_ID | Pkg_DES | PRD_DESC | EVENT_DATE | event_type_cd
-------+---------+----------+------------+--------------
1 | CC | trail | 12-12-2012 | new sub
1 | CC | trail | 12-13-2012 | exp
1 | CC | PAID | 12-14-2012 | upsell
1 | CC | PAID | 12-15-2012 | exp
1 | CC | PAID | 12-16-2012 | renewal
1 | CC | PAID | 12-17-2012 | renewal
1 | aa | trail | 12-12-2012 | new sub
1 | aa | trail | 12-13-2012 | exp
1 | aa | PAID | 12-14-2012 | renewal
1 | aa | PAID | 12-15-2012 | renewal
1 | aa | PAID | 12-16-2012 | upsell
1 | aa | PAID | 12-17-2012 | renewal
Выход, который мне нужен, как показано ниже:
REG_ID | Pkg_DES | PRD_DESC | EVENT_DATE | event_type_cd | renewal_cnt | is_ren | is_conv
-------+---------+----------+------------+---------------+-------------+--------+--------
1 | CC | trail | 12-12-2012 | new sub | 0 | 0 | 0
1 | CC | trail | 12-13-2012 | exp | 0 | 0 | 0
1 | CC | PAID | 12-14-2012 | upsell | 0 | 0 | 1
1 | CC | PAID | 12-15-2012 | exp | 0 | 0 | 1
1 | CC | PAID | 12-16-2012 | renewal | 1 | 1 | 0
1 | CC | PAID | 12-17-2012 | renewal | 2 | 1 | 0
1 | aa | trail | 12-12-2012 | new sub | 0 | 0 | 0
1 | aa | trail | 12-13-2012 | exp | 0 | 0 | 0
1 | aa | PAID | 12-14-2012 | renewal | 0 | 0 | 1
1 | aa | PAID | 12-15-2012 | renewal | 1 | 1 | 0
1 | aa | PAID | 12-16-2012 | upsell | 2 | 1 | 0
1 | aa | PAID | 12-17-2012 | renewal | 3 | 1 | 0
- Конверсия Logic: - Если PRD_DESC изменяется от Трейл оплачено 1-й раз, то она называется ПРЕОБРАЗОВАНИЯ продукт
Обновление Logic: - Если Paid Продукт обновляется с Выплачивается Пайде, то он называется RENEWAL product
renewal_cnt должен начинаться только с PAID на PAID. Если PAID для PAID имеет значение event_type_cd как exp, то счетчик не должен увеличиваться. Если тропа для оплаты имеет событие event_type_cd в качестве продления, то оно должно быть только нолем. события заказываются event_date
is_conv должно быть установлено в 1 для 1-го трейла к платной продукции.
is ren должно быть установлено равным 1 для оплаченного продукта.
У кого-то есть идея, как этого достичь?
Вы еще что-нибудь пробовали? –
@Tim Biegeleisen - Я попытался использовать функцию Rank и получить счетчик обновления, но это не сработало. :( – beckham
Попробуйте функцию 'LAG' – cha