34,576
社区成员
发帖
与我相关
我的任务
分享
select aa.*,(case when exists(select 1 from a where id>aa.id ) then (select top 1 dateadd(day,1,date) from a
where aa.date=date order by id ) else aa.date end) from a aa
create table a
(
id int,
date smalldatetime
)
insert into a
select
1,'2007-1-1' union
select
2,'2007-1-2' union
select
3,'2007-2-3' union
select
4,'2007-2-4'
select aa.*,isnull(bb.date,aa.date) from a aa left join a bb
on aa.id=bb.id-1
DECLARE @a TABLE(id int,a varchar(20))
INSERT @a SELECT 1, '2007-1-1'
UNION ALL SELECT 2, '2007-1-2'
UNION ALL SELECT 3, '2007-2-3'
UNION ALL SELECT 4, '2007-2-4'
SELECT *,
b=
CASE
WHEN EXISTS( SELECT 1 FROM @a WHERE id>a.id) THEN ( SELECT TOP 1 a FROM @a WHERE id>a.id ORDER BY id)
ELSE a
END
FROM @a a
--result
/*id a b
----------- -------------------- --------------------
1 2007-1-1 2007-1-2
2 2007-1-2 2007-2-3
3 2007-2-3 2007-2-4
4 2007-2-4 2007-2-4
(所影响的行数为 4 行)*/
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (id int,date datetime)
insert into #T
select 1,'2007-1-1' union all
select 2,'2007-1-2' union all
select 3,'2007-2-3' union all
select 4,'2007-2-4'
select a.*, isnull(b.date,a.date) as date1 from #T a left join #T b on a.id=b.id-1
/*
id date date1
----------- ----------------------- -----------------------
1 2007-01-01 00:00:00.000 2007-01-02 00:00:00.000
2 2007-01-02 00:00:00.000 2007-02-03 00:00:00.000
3 2007-02-03 00:00:00.000 2007-02-04 00:00:00.000
4 2007-02-04 00:00:00.000 2007-02-04 00:00:00.000
*/