有一个用户注册的表,里面的数据是2007-12-10 05:20:13.000
2007-11-21 08:20:40.000
2007-12-03 04:21:31.000
2007-11-04 10:21:04.000我需要统计2007年11月5日到2007年12月15日之间每20个小时都有多少人注册了,也就是有几条记录。如果这个时间段内有15个20小时,要列出:15条记录,每一条记录代表一个20个小时,在这20个小时当中有几个人注册记录。0 0 <-- 开始计算时间是:2007年11月5日
20 2
40 0
60 3
...
共15条记录,最后一条记录的截止时间是到2007年12月15日
2007-11-21 08:20:40.000
2007-12-03 04:21:31.000
2007-11-04 10:21:04.000我需要统计2007年11月5日到2007年12月15日之间每20个小时都有多少人注册了,也就是有几条记录。如果这个时间段内有15个20小时,要列出:15条记录,每一条记录代表一个20个小时,在这20个小时当中有几个人注册记录。0 0 <-- 开始计算时间是:2007年11月5日
20 2
40 0
60 3
...
共15条记录,最后一条记录的截止时间是到2007年12月15日
where ...
group by datediff(hh,time,'20071215')/20 datediff(hh,time,'20071215')/20 就是你的第几个20小时
[code=SQL]create table tb(时间 datetime , 金额 int)
insert into tb values('2007-1-1 10:00:23' , 8 )
insert into tb values('2007-1-1 10:01:24' , 4 )
insert into tb values('2007-1-1 10:05:00' , 2 )
insert into tb values('2007-1-1 10:06:12' , 3 )
insert into tb values('2007-1-1 10:08:00' , 1 )
insert into tb values('2007-1-1 10:12:11' , 5 )
go--时间段>=10:00:00 and 时间段<10:05:00
select dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,-1,时间),120),dateadd(ss,-1,时间))/5)*5,convert(varchar(10),时间,120)) as 时间段,
count(*) as 行数,
sum(金额) as 总金额
from tb
group by dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,-1,时间),120),dateadd(ss,-1,时间))/5)*5,convert(varchar(10),时间,120))
/*
时间段 行数 总金额
------------------------------------------------------ ----------- -----------
2007-01-01 10:00:00.000 3 14
2007-01-01 10:05:00.000 2 4
2007-01-01 10:10:00.000 1 5
(所影响的行数为 3 行)
*/--时间段>10:00:00 and 时间段<=10:05:00
select dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,1,时间),120),dateadd(ss,1,时间))/5)*5,convert(varchar(10),时间,120)) as 时间段,
count(*) as 行数,
sum(金额) as 总金额
from tb
group by dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,1,时间),120),dateadd(ss,1,时间))/5)*5,convert(varchar(10),时间,120))
/*
时间段 行数 总金额
------------------------------------------------------ ----------- -----------
2007-01-01 10:00:00.000 2 12
2007-01-01 10:05:00.000 3 6
2007-01-01 10:10:00.000 1 5(所影响的行数为 3 行)
*/drop table tb[/code]
DATEDIFF ( datepart , startdate , enddate ) 参数
datepart是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。