想问问大家这样的SQL 语句应该怎么写TableId, Time,
1, 8:23:00 20-July-2010
2, 8:33:00 20-July-2010
3, 8:35:00 20-July-2010
4, 8:35:00 20-July-2010
5, 8:39:00 20-July-2010
9, 8:50:00 20-July-2010
11, 8:55:00 20-July-2010
我想知道在这个小时内, 间隔时间超过5分钟(不含5分钟)的总时间
就是 Id 2 与 Id 1比较, Id 3 与 Id 2比较,
就是后一条纪录与前一条纪录 在时间上的比较, 最头最尾的数据不比较,
谢谢大家
1, 8:23:00 20-July-2010
2, 8:33:00 20-July-2010
3, 8:35:00 20-July-2010
4, 8:35:00 20-July-2010
5, 8:39:00 20-July-2010
9, 8:50:00 20-July-2010
11, 8:55:00 20-July-2010
我想知道在这个小时内, 间隔时间超过5分钟(不含5分钟)的总时间
就是 Id 2 与 Id 1比较, Id 3 与 Id 2比较,
就是后一条纪录与前一条纪录 在时间上的比较, 最头最尾的数据不比较,
谢谢大家
/*
[Author]: OrchidCat[OC]_轻骑兵(向高手学习...)
[Time]: 2010-07-21 11:48:10
[Place]: From Beijing
[Version]:
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)
Feb 9 2007 22:47:07
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)*/
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([Id] int,[Time] datetime)
insert [TB]
select 1,'2010-07-20 8:23:00' union all
select 2,'2010-07-20 8:33:00' union all
select 3,'2010-07-20 8:35:00 ' union all
select 4,'2010-07-20 8:35:00 ' union all
select 5,'2010-07-20 8:39:00 ' union all
select 9,'2010-07-20 8:50:00 ' union all
select 11,'2010-07-20 8:55:00 'select * from [TB]WITH TT
AS(
SELECT A.id,A.[Time],[B_Time] = MIN(B.[Time])
FROM dbo.TB A
inner JOIN TB B ON A.id < B.ID
GROUP BY A.id,A.[Time])SELECT * ,DATEDIFF(mi,[TIME],[B_Time])
FROM TT/*
id Time B_Time
----------- ----------------------- ----------------------- -----------
1 2010-07-20 08:23:00.000 2010-07-20 08:33:00.000 10
2 2010-07-20 08:33:00.000 2010-07-20 08:35:00.000 2
3 2010-07-20 08:35:00.000 2010-07-20 08:35:00.000 0
4 2010-07-20 08:35:00.000 2010-07-20 08:39:00.000 4
5 2010-07-20 08:39:00.000 2010-07-20 08:50:00.000 11
9 2010-07-20 08:50:00.000 2010-07-20 08:55:00.000 5(6 行受影响)*/
SELECT [总分钟数]=SUM(DATEDIFF(mi,[TIME],[B_Time]))
FROM TT
WHERE DATEDIFF(mi,[TIME],[B_Time])>5
/*总分钟数
-----------
21(1 行受影响)*/
create table #t (Id int, Time varchar(20))
insert #t select 1, '8:23:00 20-July-2010'
insert #t select 2, '8:33:00 20-July-2010'
insert #t select 3, '8:35:00 20-July-2010'
insert #t select 4, '8:35:00 20-July-2010'
insert #t select 5, '8:39:00 20-July-2010'
insert #t select 9, '8:50:00 20-July-2010'
insert #t select 11, '8:55:00 20-July-2010'
declare @lan sysname
set @lan=@@language
set language english
;with t as(
select *,rn=ROW_NUMBER() over(order by id) from #t
)select sum(ISNULL(datediff(mi,convert(datetime,A.time),convert(datetime,b.time)),0))
from t a left join t b on a.rn=b.rn-1
where datediff(mi,convert(datetime,A.time),convert(datetime,b.time))>5set language @lan
Changed language setting to us_english.-----------
21(1 行受影响)已将语言设置更改为 简体中文。