看不懂需求,以下内容仅供参考.一个按五分钟分段统计的例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

解决方案 »

  1.   


    /*------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-04-17 22:01:29
    --  Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    Jul  9 2008 14:43:34 
    Copyright (c) 1988-2008 Microsoft Corporation
    Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)------------------------------------------------------------------*/
    --> 生成测试数据表:tbIF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([id] INT,[time] DATETIME,[telephone] NVARCHAR(20))
    INSERT [tb]
    SELECT 1,N'2006-06-11 05:52:12',1360065460758 UNION ALL
    SELECT 2,N'2006-06-11 06:09:05',1380138017292 UNION ALL
    SELECT 3,N'2006-06-11 06:25:13',97363849310 UNION ALL
    SELECT 4,N'2006-06-11 06:26:08',61763849310 UNION ALL
    SELECT 5,N'2006-06-11 06:34:59',60054190811 UNION ALL
    SELECT 6,N'2006-06-11 06:44:04',1397305138553 UNION ALL
    SELECT 7,N'2006-06-11 06:51:30',60063849310 UNION ALL
    SELECT 8,N'2006-06-11 06:53:14',92713061620671 UNION ALL
    SELECT 9,N'2006-06-11 06:53:22',11713061620671 UNION ALL
    SELECT 10,N'2006-06-11 06:58:34',32054196057 UNION ALL
    SELECT 11,N'2006-06-11 07:04:42',92752581156
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    SELECT '第'+LTRIM(N+1)+'个5分钟' AS [5分钟系列],
    COUNT(1) AS 记录数
    FROM (
    SELECT 
    N=DATEDIFF(N,(SELECT MIN(TIME) FROM TB),TIME)/5 
    FROM TB
    ) AS T
    GROUP BY N
    /*
    5分钟系列                 记录数
    --------------------- -----------
    第1个5分钟                1
    第4个5分钟                1
    第7个5分钟                2
    第9个5分钟                1
    第11个5分钟               1
    第12个5分钟               1
    第13个5分钟               2
    第14个5分钟               1
    第15个5分钟               1(9 行受影响)
    */