SQLserver 实现分组统计查询(按月、小时分组)

2016-02-19 09:21 52 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐SQLserver 实现分组统计查询(按月、小时分组),精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

设置AccessCount字段可以根据需求在特定的时间范围内如果是相同IP访问就在AccessCount上累加。 代码如下:

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

该表在这儿只是演示使用,所以只提供了最基本的字段
现在往表中插入几条记录
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 根据年来查询,以月为时间单位
通常情况下一个简单的分组就能搞定
代码如下:

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

像这样分组后没有记录的月份不会显示,如下:

这当然不是我们想要的,所以得换一种思路来实现,如下:
代码如下:

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

查询结果如下:

2 根据天来查询,以小时为单位。这个和上面的类似,代码如下:
代码如下:

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 '

查询结果如下图:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1590507.html

延伸阅读
标签: SQLServer
因为项目需要,需要对上传的文件内容进行查询。通过MSDN了解到Windows索引服务可以实现对文件的全文检索,并可以通过SQL Server进行查询。项目将这两者结合,实现对上传文件的全文检索的解决方案。 方案概要: 1. 改变文件存储时的文件名 2. 配置索引服务器,并将索引服务器与MS SQL Server关联。 3. 修改SQL语句,将进行全文查询语...
标签: 电脑入门
╭╮╮ 〔╰ゆ╮〕 ╰╰╯ ︿我不在乎ノ ︿什么天长地久 ︿我只在乎ノ ︿你想不想要拥有 .︵o○ --------------------------------- 、、 - ● - ′ˋ ╰' 一抹阳光゜ ╰' 一种心...
标签: 电脑入门
▄▄▄▄▄︻︻▄ ▇▇▇▇▇◣◢▇ ╰俄呐么的爱迩゛ ╰迩为何不爱俄゛              ╪ 俄始终在等一个人 ╪─────── 一个不可能的人゛ 笑着哭、最高境界 ち2o- ◇◆ヽ `1生1世㈠双人       甜蜜的手铐  &n...
标签: Web开发
由于查询返回的数据量很大,超过10w条数据,因此需要对页面查询功能进行优化。放弃原有程序中使用DataGrid的做法,自己编写分页显示模块。     首先在页面上添加几个DIV:         div id="div_trackpoint" style=" border:solid 1px gray; height:230px; width:99%; overflow-y...
标签: PHP
  <html<body<table border=1 <? $id=@mssql_connect("ddy","sa"," ") or die("连接不上"); $db=mssql_select_db("ddy",$id); $query="select * from lr00 order by lr0012 desc"; $result=mssql_query($query); if($result): if($tt==""){ $...

经验教程

776

收藏

90
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部