晴天帮助解决,多次试用后改动了一处。
记录以备以后参考。
表jjf4178,现有列:起始时间,对方号码,要新增列:新生号 ,消失号
alter tablejjf4178 add 新生号 nvarchar(255),消失号nvarchar(255)
go
;with cte as(
select DENSE_RANK()over(orderby convert(varchar(10),起始时间,120))rn,ROW_NUMBER()over(orderby 起始时间)rn1,convert(varchar(10),起始时间,120)日期,起始时间,对方号码from jjf4178
),cte1 as(
select rn,rn1,日期,起始时间,对方号码,
(case when not exists(select 1 from cte where a.rn<60or 对方号码=a.对方号码and(rn<a.rnand rn>=a.rn-60or rn=a.rnand rn1<a.rn1))then 对方号码 end)新生号
from ctea
),cte2 as(
select rn,rn1,日期,起始时间,对方号码,新生号,
(case when not exists(select 1 from cte where 对方号码=a.对方号码and(rn<a.rnand rn>=a.rn-60or rn=a.rnand rn1<a.rn1))then 对方号码 end)f
from cte1a
)
update tset 新生号=b.新生号,消失号=b.消失号
from jjf4178t inner join(
select 日期,起始时间,对方号码,新生号,
stuff((select','+ffrom cte2 b where rn=a.rn-60and not exists(select 1 from cte2 where 对方号码=b.fand rn>b.rnand rn<=a.rnor rn=a.rnand rn1<a.rn1)for xml path('')),1,1,'')消失号
from cte2a
)b on t.起始时间=b.起始时间
go
select 起始时间,对方号码,新生号,消失号from jjf4178 order by 起始时间