22,209
社区成员
发帖
与我相关
我的任务
分享
WITH a(Eid,NAME,Costid,JoinDate ,effectdate) AS (
select 222,N'张三 ', 20,'2016-01-03 ','2016-01-03' union all
select 223 ,N'张三', 50,'2016-01-03','2016-01-30' union all
select 224,N'张三', 10 ,'2016-01-03','2016-02-15' union all
select 225,N'张三 ', 60,'2016-01-03','2016-03-03' union all
select 226 ,N'张三', 70,'2016-01-03','2016-04-05'
)
SELECT a.*,a.effectdate AS StartEffectdate
,isnull(dateadd(d,-1,b. nextEffect),GETDATE()) as EndEffectdate FROM a
OUTER APPLY (
SELECT TOP 1 aa.effectdate AS nextEffect
FROM a AS aa WHERE aa.NAME=a.NAME AND aa.effectdate>a.effectdate ORDER BY aa.effectdate
) b
/*
Eid NAME Costid JoinDate effectdate StartEffectdate EndEffectdate
222 张三 20 2016-01-03 2016-01-03 2016-01-03 2016-01-29 00:00:00.000
223 张三 50 2016-01-03 2016-01-30 2016-01-30 2016-02-14 00:00:00.000
224 张三 10 2016-01-03 2016-02-15 2016-02-15 2016-03-02 00:00:00.000
225 张三 60 2016-01-03 2016-03-03 2016-03-03 2016-04-04 00:00:00.000
226 张三 70 2016-01-03 2016-04-05 2016-04-05 2016-03-08 09:55:49.010
*/