sql 数据集中每行数据遍历比较大小

cnahfly_shy 2011-08-09 08:20:58
现查询出一数据集,其中有一个字段是日期值,现我想在这数据行中,拿第二行中的日期与第一行比较,如果比较的时间大于1小时的则更新第二行数据中的一个字段值,不大于则不处理;然后拿第三条数据中的日期与第二条数据中的日期相比较,如果比较的时间大于1小时的则更新第二行数据中的一个字段值,不大于则不处理......依次循环完数据行数

请教大家 怎么写 谢谢了
...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a15126612005 2011-08-10
  • 打赏
  • 举报
回复
嘿嘿
偶来了
LMAOhuaNL 2011-08-10
  • 打赏
  • 举报
回复
用update就行的
gogodiy 2011-08-10
  • 打赏
  • 举报
回复
是不是第一行数据不用比较了?是的话,用CTE来处理

create table t1
(
riqi datetime,
a int
)
insert into t1
select '2011-08-10 00:00:01.000',1 union all
select '2011-08-10 01:00:15.000',2 union all
select '2011-08-10 02:02:01.000',3 union all
select '2011-08-10 03:00:01.000',4 union all
select '2011-08-10 04:15:01.000',5 union all
select '2011-08-10 05:05:01.000',6 union all
select '2011-08-10 06:00:01.000',7
select * from t1

;with aaa as
(
select ROW_NUMBER() over(order by riqi) as row,* from t1
)
,bbb as
(
select a.row as row1,a.riqi as riqi1,a.a as a1,b.row as row2,b.riqi as riqi2,b.a as a2
from aaa as a inner join aaa as b on a.row=b.row-1
)
update bbb set a2=a1 where riqi1<DATEADD(HOUR,-1,riqi2)
--小F-- 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happyflystone 的回复:]
生成行号,可以直接用update
[/Quote]
一缕青烟 2011-08-09
  • 打赏
  • 举报
回复
先要一个行号,然后自联,然后 update case()...你懂的。


create table #mytable
(
myid int identity(1,1),
mydate date
)

insert into #mytable
select '2011-2-4' union all
select '2011-3-1' union all
select '2011-2-9' union all
select '2011-5-23' union all
select '2011-5-3' union all
select '2011-2-16' union all
select '2011-2-3' union all
select '2011-7-2'

select*,DATEDIFF (hh ,date1,date2) as 后一天与前一天时间差 from(
select a.mydate as date1,b.mydate as date2 from #mytable a
inner join #mytable b on a.myid+1=b.myid
)a

-狙击手- 2011-08-09
  • 打赏
  • 举报
回复
生成行号,可以直接用update
AcHerat 2011-08-09
  • 打赏
  • 举报
回复
悲催了,估计要用到游标了吧!

是不是第三行要和第二行更新后的做比较!

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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