求语句

t0h 2008-05-22 04:23:36
id整数 [date]时间类型
1 '2007-1-1'
2 '2007-1-2'
3 '2007-2-3'
4 '2007-2-4'

想得到表
id整数 [date]时间类型 [date1]时间类型
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'
...全文
91 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ojuju10 2008-05-24
  • 打赏
  • 举报
回复


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
ojuju10 2008-05-24
  • 打赏
  • 举报
回复

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

jiamingwudi 2008-05-24
  • 打赏
  • 举报
回复
xue xi
Herb2 2008-05-22
  • 打赏
  • 举报
回复
鸟的和甜微微的是正解
qdtianjinhua 2008-05-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chuifengde 的回复:]
SQL codeDECLARE @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 …
[/Quote]
sweetweiwei 2008-05-22
  • 打赏
  • 举报
回复
--try
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 a.*,case when b.date is null then a.date else b.date end as 'date'
from a left join a as b on a.id+1 = b.id
结果
id date date
----------- ----------------------- -----------------------
1 2007-01-01 00:00:00 2007-01-02 00:00:00
2 2007-01-02 00:00:00 2007-02-03 00:00:00
3 2007-02-03 00:00:00 2007-02-04 00:00:00
4 2007-02-04 00:00:00 2007-02-04 00:00:00

(4 row(s) affected)
chuifengde 2008-05-22
  • 打赏
  • 举报
回复
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 行)*/
Limpire 2008-05-22
  • 打赏
  • 举报
回复
--> 测试数据: #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
*/
yms_wangxm 2008-05-22
  • 打赏
  • 举报
回复
啥呀,怎么看不到什么规则??
-狙击手- 2008-05-22
  • 打赏
  • 举报
回复
select id,convert(char(10),[date],120) as [date],convert(char(10),dateadd(d,1,[date]),120) as date1
from ta
-狙击手- 2008-05-22
  • 打赏
  • 举报
回复
select id,[date],dateadd(d,1,[date]) as date1
from ta

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧