首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

按小时分组统计解决方法

2012-03-22 
按小时分组统计有张表SELECTAdLogID,AdLogIpId,AdLogAddtime,KeywordIDFROMUctoyAdLogsWHERE(KeywordID19

按小时分组统计
有张表

SELECT   AdLogID,   AdLogIpId,   AdLogAddtime,   KeywordID
FROM   UctoyAdLogs
WHERE   (KeywordID   =   195)   AND   (LogID   IN   (33,   34,   35,   36))
AND   (convert(varchar(10),AdLogAddtime,120)   BETWEEN  
            '2007-04-25 '   AND   '2007-04-26 ')
根据条件取出来的是:

        AdLogID             AdLogIpId         AdLogAddtime        
10866482007-4-25   11:34:01
10896482007-4-25   10:34:02
1390152007-4-26   9:49:03
1392102007-4-25   9:49:03
1396152007-4-25   12:49:03
1397132007-4-25   9:49:03
1485152007-3-25   13:53:15
1487152007-3-26   9:53:16
1491122007-4-26   14:53:16
149292007-4-25   9:53:16
1499152007-4-26   9:54:57
1501112007-4-25   14:54:57
1505152007-4-25   9:54:58
1507152007-4-25   9:54:58


现在想按小时   达到如下统计效果

小时段                     count       ipcount
0:00-1:00                 0             0
1:00-2:00                 0             1
2:00-3:00                 0             0
3:00-4:00                 1             0
4:00-5:00                 3             0
5:00-6:00                 4             0
6:00-7:00                 5             0
7:00-8:00                 6             0
8:00-9:00                 0             0
9:00-10:00               2             1
......
22:00-23:00             0             0
23:00-24:00               0             0


count   是统计该时间段内的记录数     ipcount是统计该时间段内的AdLogIpId数量

请问高手   该怎么实现??

[解决办法]
select
a.小时段,
isnull(count(b.AdLogID) ,0),
isnull(count(distinct b.AdLogIpId),0)
from
(select 0 as hh, '0:00-1:00 ' as 小时段 union
select 1, '1:00-2:00 ' union
...
select 23, '23:00-24:00 ') a
left join
UctoyAdLogs b
on
a.hh=datepart(hh,b.AdLogAddtime)
and
...
group by
a.小时段

[解决办法]
up

热点排行