SQL按时间段统计(5分钟统计一次访问量为例,oracle统计)
需求:统计当天的访问量,每五分钟采集一次
表结构中有日期字段,类型TIMESTAMP
如果,统计是采用每秒/分钟/小时/天/周/月/年,都非常容易实现,只要to_char日期字段然后group by分组即可
但是:如果是X秒/分钟/小时/天/周/月/年 and X>1,就需要变通实现,方法如下:
方案一:临时表/临时存储
统计每5分钟的访问量,存入临时表或者临时存储(比如excel)
循环当天整个时间段
然后对临时表/临时存储的数据做排序
方案二:伪列的SQL查询(数据量小于<1亿数据量,且时间列做索引)
分析:5分钟一次,那就对每条记录做个伪列,每5分钟的数据都是一个标识。
比如:创建时间=201604061200 -至- 2016040612,这五分钟统一标识为2016040612
创建时间=2016040612 -至- 2016040612,这五分钟统一标识为2016040612
实现起来非常方便:
a. 取出创建时间的分钟参数:to_char(t.create_time,'mi'),都是两位:比如01分,07分,13分,19分....
只判断第二位,如果第二位<5,统一让分钟的第二位=0,否则(第二位>=5)统一让分钟的第二位=5
而分钟的第一位不变
比如01分、04分统一标识为00分,05、06、09分统一标识为05分
切割字符串使用substr函数
判断使用case when
拼接使用||
b.取出创建时间的年月日小时参数,拼装上第一步的特殊分钟参数
一个伪列就这么诞生了
关键SQL如下:
case when substr(to_char(t.create_time,'mi'),2,1)<5 then to_char(t.create_time,'yyyymmddhh24')||substr(to_char(t.create_time,'mi'),1,1)||0
else to_char(t.create_time,'yyyymmddhh24')||substr(to_char(t.create_time,'mi'),1,1)||5 end as newTime
上一个完整的sql
select count(tmp.id) totalNum,tmp.newTime
from(
select t.id,t.latest_status, -- ID,状态
to_char(t.create_time,'yyyymmddhh24mi') oldTime, -- 原来的时间
case when substr(to_char(t.create_time,'mi'),2,1)<5 then to_char(t.create_time,'yyyymmddhh24')||substr(to_char(t.create_time,'mi'),1,1)||0
else to_char(t.create_time,'yyyymmddhh24')||substr(to_char(t.create_time,'mi'),1,1)||5 end as newTime -- 时间段伪列
from acquire_order t
where t.create_time>=to_date('20160406000000','yyyymmddhh24miss')
order by t.create_time asc
) tmp
group by tmp.newTime
order by totalNum desc
SQL按时间段统计(5分钟统计一次访问量为例,oracle统计)的更多相关文章
- 【hive】时间段为五分钟的统计
问题内容 今天遇到了一个需求,需求就是时间段为5分钟的统计.有数据的时间戳.对成交单量进行统计. 想法思路 因为数据有时间戳,可以通过from_unixtime()来获取具体的时间. 有了具体的时间, ...
- 基于Oracle的SQL优化(崔华著)-整理笔记-第5章“Oracle里的统计信息”
第5章“Oracle里的统计信息” 详细介绍了Oracle数据库里与统计信息相关的各个方面的内容,包括 Oracle数据库中各种统计信息的分类.含义.收集和查看方法,以及如何在Oracle数据库里正确 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- 写sql语句分别按日,星期,月,季度,年统计
--写sql语句分别按日,星期,月,季度,年统计销售额 --按日 ' group by day([date]) --按周quarter ' group by datename(week,[date]) ...
- sql server的数据库个数、表个数及表的数据量统计
sql server的数据库个数.表个数及表的数据量统计 --由于今天要监控数据,急需统计实例中1有多少库2库里有多少表3每个表有多少数据 --将写好的代码贴出来,用到如下的: --sysobje ...
- ORACLE 统计文件后缀SQL
ORACLE 统计文件后缀SQL查询语句 select lower(substr(file_name,instr(file_name, '.', -1),length(file_name))),cou ...
- 收集oracle统计信息
优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...
- 有关Oracle统计信息的知识点[z]
https://www.cnblogs.com/sunmengbbm/p/5775211.html 一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如, ...
- 有关Oracle统计信息的知识点
一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于 ...
随机推荐
- 文献综述一:基于UML技术的商品管理系统设计与实现
一.基本信息 标题:基于UML技术的商品管理系统设计与实现 时间:2018 出版源:福建电脑 文件分类:uml技术的研究 二.研究背景 使用 UML 技术对商品管理系统进行了分析与研究,使用户对商品信 ...
- Mybatis学习笔记5 - 参数处理
1.单个参数:mybatis不会做特殊处理,#{参数名}:取出参数值. 2.多个参数:mybatis会做特殊处理. 多个参数会被封装成 一个map, key:param1...paramN,或者参数的 ...
- nodejs的异步非阻塞IO
简单表述一下:发启向系统IO操作请求,系统使用线程池IO操作,执行完放到事件队列里,node主线程轮询事件队列,读取结果与调用回调.所以说node并非真的单线程,还是使用了线程池的多线程. 上个图看看 ...
- OpenStack概念
OpenStack is a global collaboration ofdevelopers and cloud computing technologists producing the ubi ...
- JS 类似contains方法,用indexOf实现
js提供了另一个方法indexOf: str.indexOf("substr") != -1; 如果上面这个表达式为true,则包含,反之则不包含.
- Android JNI和NDK的关系
转自:http://blog.csdn.net/elfylin/article/details/6121466 1.什么JNI Java Native Interface(JNI)标准是java平台的 ...
- .NET Core 部署到CentOS–2.创建守护进程, 通过Nginx公网访问
继上一篇, 我们确定在内网可以通过 "http://localhost:5000",可以访问到站点后,接下来我们要配置"守护进程","Nginx公网8 ...
- checkBox 全选、全不选、反选
checkBox的使用: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- mysql-查询的案例
查询每个专业的男生人数和女生人数分别是多少 #方式一: select count(*) 个数,sex,majorid from student group by sex,majorid; #方式二: ...
- Chrome浏览器正常,IE下界面却乱了
背景:项目实战中总会遇到一些小问题,IE特别多 Chrome浏览器页面正常,IE下界面就乱了 原因分析 1.首先想到的是代码有米有问题呢?主要指的是兼容性 2.兼容性没有问题,那我们打开IE的开发工具 ...