欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQLserver 實(shí)現(xiàn)分組統(tǒng)計(jì)查詢(按月、小時(shí)分組)

 更新時(shí)間:2009年06月05日 23:38:13   作者:  
首先創(chuàng)建數(shù)據(jù)表IP地址,訪問(wèn)時(shí)間和訪問(wèn)次數(shù)。如果每訪問(wèn)一次就插入一條記錄,那么AccessCount可以不要,查詢時(shí)使用count就可以了,這樣當(dāng)訪問(wèn)量很大的時(shí)候會(huì)對(duì)數(shù)據(jù)庫(kù)造成很大壓力。

設(shè)置AccessCount字段可以根據(jù)需求在特定的時(shí)間范圍內(nèi)如果是相同IP訪問(wèn)就在AccessCount上累加。

復(fù)制代碼 代碼如下:

Create table Counter
(
CounterID int identity(1,1) not null,
IP varchar(20),
AccessDateTime datetime,
AccessCount int
)

該表在這兒只是演示使用,所以只提供了最基本的字段
現(xiàn)在往表中插入幾條記錄
insert into Counter
select '127.0.0.1',getdate(),1 union all
select '127.0.0.2',getdate(),1 union all
select '127.0.0.3',getdate(),1

1 根據(jù)年來(lái)查詢,以月為時(shí)間單位
通常情況下一個(gè)簡(jiǎn)單的分組就能搞定
復(fù)制代碼 代碼如下:

select
convert(varchar(7),AccessDateTime,120) as Date,
sum(AccessCount) as [Count]
from
Counter
group by
convert(varchar(7),AccessDateTime,120)

像這樣分組后沒(méi)有記錄的月份不會(huì)顯示,如下:

這當(dāng)然不是我們想要的,所以得換一種思路來(lái)實(shí)現(xiàn),如下:
復(fù)制代碼 代碼如下:

declare @Year int
set @Year=2009
select
m as [Date],
sum(
case when datepart(month,AccessDateTime)=m
then AccessCount else 0 end
) as [Count]
from
Counter c,
(
select 1 m
union all select 2
union all select 3
union all select 4
union all select 5
union all select 6
union all select 7
union all select 8
union all select 9
union all select 10
union all select 11
union all select 12
) aa
where
@Year=year(AccessDateTime)
group by
m

查詢結(jié)果如下:

2 根據(jù)天來(lái)查詢,以小時(shí)為單位。這個(gè)和上面的類(lèi)似,代碼如下:
復(fù)制代碼 代碼如下:

declare @DateTime datetime
set @DateTime=getdate()
select
right(100+a,2)+ ':00 -> '+right(100+b,2)+ ':00 ' as DateSpan,
sum(
case when datepart(hour,AccessDateTime)> =a
and datepart(hour,AccessDateTime) <b
then AccessCount else 0 end
) as [Count]
from Counter c ,
(select 0 a,1 b
union all select 1,2
union all select 2,3
union all select 3,4
union all select 4,5
union all select 5,6
union all select 6,7
union all select 7,8
union all select 8,9
union all select 9,10
union all select 10,11
union all select 11,12
union all select 12,13
union all select 13,14
union all select 14,15
union all select 15,16
union all select 16,17
union all select 17,18
union all select 18,19
union all select 19,20
union all select 20,21
union all select 21,22
union all select 22,23
union all select 23,24
) aa
where datediff(day,@DateTime,AccessDateTime)=0
group by right(100+a,2)+ ':00 -> '+right(100+b,2)+ ':00 '

查詢結(jié)果如下圖:

相關(guān)文章

最新評(píng)論