文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» 微软SQL Server专区 » SQL Server数据库管理 » 求助一个关于取时间段间隔的语句       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 求助一个关于取时间段间隔的语句  ( 查看:439  回复:4 )   
 该主题悬赏的40无忧币已被全部领完 
 
yueyangflash
新新人类  点击可查看详细


帖子 128
精华 0
无忧币 535
积分 144
阅读权限 20
注册日期 2007-4-23
最后登录 2008-8-25 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-3-25 14:10   标题:求助一个关于取时间段间隔的语句
上一帖 |
2008-03-23 10:10:15.000
2008-03-23 10:12:17.000
2008-03-23 10:12:33.000
2008-03-23 10:13:37.000
2008-03-23 10:42:39.000
2008-03-23 10:42:41.000
2008-03-23 10:43:42.000
2008-03-23 10:44:38.000
2008-03-23 11:00:05.000
2008-03-23 11:01:19.000
2008-03-23 11:01:36.000
2008-03-23 11:02:11.000
2008-03-23 11:23:22.000
2008-03-23 11:45:06.000
要求:
以上时间段是一个例子,我的要求是,整个数据库按时间字段排序,然后判断出时间间隔大于20分钟的时间段,
例如:
2008-03-23 10:13:37.000     
2008-03-23 10:42:39.000   

2008-03-23 11:02:11.000
2008-03-23 11:23:22.000
2008-03-23 11:45:06.000

DATEDIFF(minute,LastVisitTime,getdate())>20这个函数虽然符合一点要求,但是不行,他取得是当前时间,
我要判断的是上一条记录和下一条记录的时间间隔大于20分钟的!

请帮忙看下!谢谢!



2008-3-25 14:101楼
[ 顶部 ]
 
dggh
新新人类  点击可查看详细



帖子 130
精华 0
无忧币 1085
积分 134
阅读权限 20
注册日期 2007-9-28
最后登录 2008-9-4 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-3-26 14:09  该回复被 yueyangflash 奖励 40 点无忧币
此回复于2008-04-07 11:19被 yueyangflash 评为最佳答案

要使用自连接。

在sqlserver2005中使用排序函数可以轻松实现:

select a.LastVisitTime,b.LastVisitTime from
(select ROW_NUMBER() OVER(ORDER BY LastVisitTime ASC) AS 'RowNumber',LastVisitTime
FROM tablename ) a,
(select ROW_NUMBER() OVER(ORDER BY LastVisitTime ASC) AS 'RowNumber',LastVisitTime
FROM tablename ) b
where a.RowNumber=b.RowNumber-1 and DATEDIFF(minute,a.LastVisitTime,b.LastVisitTime)>20

--注:在sql server 2000中同样的思路实现可能要用到临时表+identity自增一列来进行



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-3-26 14:092楼
[ 顶部 ]
 
ribut9225
主版主  点击可查看详细


开坛元老   内阁大臣   诚信兄弟   主版主专用   巨蟹座  
帖子 3069
精华 1
无忧币 5692
积分 4079
阅读权限 150
来自 (保密)
注册日期 2006-6-22
最后登录 2008-9-8 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-3-26 14:09 
用游标写了
从第二行开始循环
一行一行的比较吧



用户必读,51CTO积分系统调整通知
2008-3-26 14:093楼
[ 顶部 ]
 
yueyangflash
新新人类  点击可查看详细


帖子 128
精华 0
无忧币 535
积分 144
阅读权限 20
注册日期 2007-4-23
最后登录 2008-8-25 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-3-27 12:25 
create table tb(时间 datetime)
insert into tb values('2008-03-23 10:10:15.000')
insert into tb values('2008-03-23 10:12:17.000')
insert into tb values('2008-03-23 10:12:33.000')
insert into tb values('2008-03-23 10:13:37.000')
insert into tb values('2008-03-23 10:42:39.000')
insert into tb values('2008-03-23 10:42:41.000')
insert into tb values('2008-03-23 10:43:42.000')
insert into tb values('2008-03-23 10:44:38.000')
insert into tb values('2008-03-23 11:00:05.000')
insert into tb values('2008-03-23 11:01:19.000')
insert into tb values('2008-03-23 11:01:36.000')
insert into tb values('2008-03-23 11:02:11.000')
insert into tb values('2008-03-23 11:23:22.000')
insert into tb values('2008-03-23 11:45:06.000')
go

select m.时间 开始时间 , n.时间 结束时间 from
(select 时间 , px = (select count(*) from tb where 时间 < t.时间) + 1 from tb t) m,
(select 时间 , px = (select count(*) from tb where 时间 < t.时间) + 1 from tb t) n
where m.px = n.px - 1 and datediff(mi , m.时间 , n.时间) > 20

这个语句虽然可以达到我得要求!但是还有一点问题!



create table tb(时间 datetime,编号)
insert into tb values('2008-03-23 10:10:15.000',1)  
insert into tb values('2008-03-23 10:12:17.000',1)  
insert into tb values('2008-03-23 10:12:33.000',1)  
insert into tb values('2008-03-23 10:13:37.000',1)  
insert into tb values('2008-03-23 10:42:39.000',1)  
insert into tb values('2008-03-23 10:42:41.000',1)  
insert into tb values('2008-03-23 10:43:42.000',1)  
insert into tb values('2008-03-23 10:44:38.000',1)  
insert into tb values('2008-03-23 11:00:05.000',1)  
insert into tb values('2008-03-23 11:01:19.000',2)  
insert into tb values('2008-03-23 11:01:36.000',2)  
insert into tb values('2008-03-23 11:02:11.000',2)  
insert into tb values('2008-03-23 11:23:22.000',2)  
insert into tb values('2008-03-23 11:45:06.000',2)  

我想先查出编号为“1”的所有数据,然后按照这个再行筛选!
谢谢!



2008-3-27 12:254楼
[ 顶部 ]
 
yueyangflash
新新人类  点击可查看详细


帖子 128
精华 0
无忧币 535
积分 144
阅读权限 20
注册日期 2007-4-23
最后登录 2008-8-25 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-4-7 11:18 
没有适合我的!只有CSDN上面有个合适的!



2008-4-7 11:185楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号