`

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

阅读更多

转自:http://xuzhaoshancm.blog.163.com/blog/static/51118891200981454846536/

首先创建数据表IP地址,访问时间和访问次数。如果每访问一次就插入一条记录,那么AccessCount可以不要,查询时使用count就可以了,这样当访问量很大的时候会对数据库造成很大压力。设置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 '


 

查询结果如下图:

 

 

分享到:
评论

相关推荐

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

    设置AccessCount字段可以根据需求在特定的时间范围内如果是相同IP访问就在AccessCount上累加。 代码如下:Create table Counter ( CounterID int identity(1,1) not null, IP varchar(20), AccessDateTime datetime, ...

    mysql 统计一天24小时数据默认补0SQL

    利用mysql的函数实现统计查询一天24小时的数据,然后统计时间没有的数据默认补上了零。

    SQL SERVER 分组求和sql语句

    分组后分组合计以及总计SQL语句(稍微整理了一下)MYSQL每隔10分钟进行分组统计的实现方法mysql使用GROUP BY分组实现取前N条记录的方法详解MySQL中的分组查询与连接查询语句sql server如何利用开窗函数over()进行...

    sql中时间以5分钟半个小时任意间隔分组的实现方法

    主要介绍了sql中时间以5分钟半个小时任意间隔分组的实现方法,在文中给大家提到了sql server时间查询的代码,需要的朋友可以参考下

    MYSQL每隔10分钟进行分组统计的实现方法

    主要给大家介绍了如何利用MYSQL实现每隔10分钟进行分组统计的方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧。

    如何统计全天各个时间段产品销量情况(sqlserver)

    数据库环境:SQL SERVER 2005 现有一个产品销售实时表,表数据如下: ...spt_values来实现,进行行转列时,根据type和处理后的ctime分组即可。 1.建表,导入数据 CREATE TABLE snake (name VARCHAR(10 ),type

    3天从零快速搭建BI商业大数据分析平台视频教程

    4.5 DQL之分组查询group by 4.6 DQL之排序查询order by 4.7 DQL之分页查询limit 4.8 DQL之结果保存 第五章:多表复杂分析查询 5.1 多表查询:表与表之间的关系 5.2 多表查询:Join关联 5.3 多表查询:子查询 第六...

    王中王羽毛球馆管理软件V5.3

    提供史上最强大的图形查询界面,可以按日、按周、按月查询预订信息。预订人可以临时取消不来,操作灵活。支持球票管理,出售球票时自动产生预订。开场时无需付款. 2.4界面美观大方全键盘操作 (不用鼠标也能操作...

    王中王体育馆管理软件

    价格,支持按小时或者按次计费缺省一次是2小时,可以参数设置一次的长短 系统可以建立无数个定价规则,规则有优先级别,级别高的规则起作用,这样理论上系统可以实现无穷个价格方案,而付出的成本却是异常低廉的,这...

    最全的oracle常用命令大全.txt

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL&gt;select username,default_tablespace from user_users; 查看当前用户的角色 SQL&gt;select * from user_...

    《程序天下:JavaScript实例自学手册》光盘源码

    13.8 12小时制和24小时制的转换 13.9 标题栏显示时间 13.10 超过时间页面自动跳转 13.11 分时段问候用户 13.12 获取服务器时间 13.13 倒计时显示 13.14 背景时钟 13.15 计算某天星期几 13.16 计算时间差 13.17 计算...

    程序天下:JavaScript实例自学手册

    13.8 12小时制和24小时制的转换 13.9 标题栏显示时间 13.10 超过时间页面自动跳转 13.11 分时段问候用户 13.12 获取服务器时间 13.13 倒计时显示 13.14 背景时钟 13.15 计算某天星期几 13.16 计算时间差 13.17 计算...

    python入门到高级全栈工程师培训 第3期 附课件代码

    本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用...

    乘风广告联盟系统 v6.6

    网站主按ip计费的同时广告主按pv扣费;一个ip多次计费;防作弊时间自己定义;广告效果模板自己管理;支持独立的客服和商务后台数据查看提成和结算等等。 功能: 1.适合用途:一.广告联盟;二.和CMS、论坛或商城等...

    delphi 开发经验技巧宝典源码

    3.4 排序及分组类算法 56 0084 利用回溯法将一组数平均分成两组 56 0085 利用冒泡法对数字进行排序 58 0086 用回溯法找出n个自然数中取r个数的所有组合 58 0087 0~N位数的任意组合 59 0088 在数组中快速...

    delphi 开发经验技巧宝典源码06

    3.4 排序及分组类算法 56 0084 利用回溯法将一组数平均分成两组 56 0085 利用冒泡法对数字进行排序 58 0086 用回溯法找出n个自然数中取r个数的所有组合 58 0087 0~N位数的任意组合 59 0088 在数组中快速...

Global site tag (gtag.js) - Google Analytics