想了很久,没有找到解决方法,请教大家,帮我计算一下产品周期,多谢。。。
原始数据如下:
卡号 | 产品 | 动作 | 开始日期 | 结束日期
A001 | A产品 | 开通 | 2014-01-01 | 2014-05-30
A001 | A产品 | 续约 | 2014-06-01 | 2014-12-31
A001 | A产品 | 取消 | 2014-06-01 | 2014-12-31
A001 | A产品 | 重开 | 2014-06-08 | 2015-01-07
A001 | A产品 | 续约 | 2015-01-08 | 2015-06-07
A002 | B产品 | 开通 | 2014-01-01 | 2014-05-30
A002 | B产品 | 续约 | 2014-06-01 | 2014-12-31
A002 | B产品 | 续约 | 2015-01-01 | 2015-05-30
计算成以下数据:
卡号 | 产品 | 动作 | 开始日期 | 结束日期 | 产品周期
A001 | A产品 | 开通 | 2014-01-01 | 2014-05-30 | 1
A001 | A产品 | 续约 | 2014-06-01 | 2014-12-31 | 2
A001 | A产品 | 取消 | 2014-06-01 | 2014-12-31 | 0
A001 | A产品 | 重开 | 2014-06-08 | 2015-01-07 | 1
A001 | A产品 | 续约 | 2015-01-08 | 2015-06-07 | 2
A002 | B产品 | 开通 | 2014-01-01 | 2014-05-30 | 1
A002 | B产品 | 续约 | 2014-06-01 | 2014-12-31 | 2
A002 | B产品 | 续约 | 2015-01-01 | 2015-05-30 | 3
需要计算一下产品周期,计算方法是这样的,开通算1,续约加1,取消归0,取消后产品周期从1重新计算。
多谢大家。。。。。
------解决思路----------------------
create table mytable(
卡号 varchar(5) ,产品 varchar(10) ,动作 varchar(10) ,开始日期 varchar(10) ,结束日期 varchar(10)
)
go
insert into mytable values
('A001','A产品','开通','2014-01-01','2014-05-30'),
('A001','A产品','续约','2014-06-01','2014-12-31'),
('A001','A产品','取消','2014-06-01','2014-12-31'),
('A001','A产品','重开','2014-06-08','2015-01-07'),
('A001','A产品','续约','2015-01-08','2015-06-07'),
('A002','B产品','开通','2014-01-01','2014-05-30'),
('A002','B产品','续约','2014-06-01','2014-12-31'),
('A002','B产品','续约','2015-01-01','2015-05-30')
go
with myrn as (
select * ,ROW_NUMBER() over(partition by 卡号 order by 卡号) as rn from mytable
) ,
mt as (
select * , 1 as 产品周期 from myrn where rn = 1
union all
select myrn.* , case when myrn.动作 = '续约' then mt.产品周期 + 1
when myrn.动作 = '取消' then 0
when myrn.动作 = '重开' then 1
end
from mt , myrn where myrn.rn = mt.rn + 1 and mt.卡号 = myrn.卡号
)
select * from mt order by 卡号 , rn
go
drop table mytable
go
(8 行受影响)
卡号 产品 动作 开始日期 结束日期 rn 产品周期
----- ---------- ---------- ---------- ---------- --- -----------
A001 A产品 开通 2014-01-01 2014-05-30 1 1
A001 A产品 续约 2014-06-01 2014-12-31 2 2
A001 A产品 取消 2014-06-01 2014-12-31 3 0
A001 A产品 重开 2014-06-08 2015-01-07 4 1
A001 A产品 续约 2015-01-08 2015-06-07 5 2
A002 B产品 开通 2014-01-01 2014-05-30 1 1
A002 B产品 续约 2014-06-01 2014-12-31 2 2
A002 B产品 续约 2015-01-01 2015-05-30 3 3
(8 行受影响)