SQL——按照季度,固定时间段,分组统计数据
最近在工作中接到了一个需求,要求统计当月以10天为一个周期,每个周期的数据汇总信息。假设有一张表如下:
表table_test中
ID AMOUNT CREATE_DATE
1 50 2017-01-01
2 50 2017-01-09
3 50 2017-01-11
4 50 2017-01-19
5 50 2017-01-21
6 50 2017-01-22
7 50 2017-01-24
相当于以CREATE_DATE为组条件,1 - 10,11 -20,21 - 月末,每一个时间段的AMOUNT字段的和。面对这个需求,首先想到的解决方案为以日期作为参数。使用代码传参重复调用,发现该方法效率极低,后来做出相应优化,使用 UNION ALL 去调用 sql如下
SELECT SUM(AMOUT) AS totalAmount FORM TABLE_TEST
WHERE CREATE_DATE BETWEEN '2017-01-01' AND '2017-01-10'
UNION ALL
SELECT SUM(AMOUT) AS totalAmount FORM TABLE_TEST
WHERE CREATE_DATE BETWEEN '2017-01-11' AND '2017-01-20'
UNION ALL
SELECT SUM(AMOUT) AS totalAmount FORM TABLE_TEST
WHERE CREATE_DATE BETWEEN '2017-01-21' AND '2017-01-30'
后来数据量大了后发现,效率有些跟不上。就想到了代替的优化SQL如下
SELECT
sum(amount) totalAmount,
floor((day(CREATE_DATE) - day(NOW()))/10) AS TIMESAPN
FROM
table_test
where MONTH(create_date) = MONTH(now())
GROUP BY
TIMESAPN --该sql为mysql语句,如果为其他数据库可替换为其他数据库函数
关键点在于:
floor((day(CREATE_DATE) - day(NOW()))/10) AS TIMESAPN
当 TIMESAPN 为 0 时则在第一个周期,为1则在第二个周期,以此类推,最后在以该字段为分组条件。完美解决效率问题。可以适当的想一下如果该需求改成按照季度统计。只需要截取日期的月份/4则可以完美解决。也就是说这个sql
基本可以解决按照一段时间去统计的大部分需求。(该sql为博主自己想出来的,适用于本需求。如果有什么更好的解决方法可以留言。互相学习)
SQL——按照季度,固定时间段,分组统计数据的更多相关文章
- sql根据时间戳按年月日分组统计
sql根据时间戳按年月日分组统计,用于按日期分类: create_time为时间格式(字段名create_time 根据自己表字段修改,数据库中存为201610071202) SELECT DATE_ ...
- 常用sql:按照表中的某一列对数据进行分组,统计数据条数
select FROM_UNIXTIME(start_time,'%Y-%m-%d')as date,COUNT(*) FROM random_num GROUP BY FROM_UNIXTIME(s ...
- mysql按日期分组统计数据
最近在做一个招聘网时,需要显示一个月内企业招聘信息的发布数量,按日期分组统计,刚开始是直接从源数据库表里面进行group by,但这样子就出现日期不连续的问题了,我想要的效果是,若当天没有数据,则显示 ...
- mysql按月,按日分组统计数据
group by DATE_FORMAT(createtime,'%Y-%m');//按月统计数据 group by DATE_FORMAT(createtime,'%Y-%m-%d');//按天统计 ...
- Oracle按时间段分组统计
想要按时间段分组查询,首先要了解level,connect by,oracle时间的加减. 关于level这里不多说,我只写出一个查询语句: ----level 是一个伪例 ---结果: 关于conn ...
- sql server 分组统计数据
说明:group by是sql中对数据表中的数据进行分组的,在select列表中出现的字段必须全部出现在group by 字段中,出现在聚合函数中的字段在group by中可有可无,没有出现在sele ...
- sql server 以10分钟分组 统计人数
请问针对时间段从每天早上7点开始统计每十分钟人 解决思路: 我以前做过一个关于月份的,是说每3个月以分组,其实是一样的.不过可能啊,整体数据量大会有问题.如果你只是求一天的,那绝对没问题.[1]如果只 ...
- Mysql按周,按月,按日,按小时分组统计数据
按周 select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; ...
- mysql按天,按周,按月,按季度,按年统计数据
/*查询2小时前的数据*/select * from tableName WHERE create_time HOUR) SELECT count(id) FROM rd_track_info WHE ...
随机推荐
- wget下载整个网站
wget下载整个网站wget下载整个网站可以使用下面的命令 wget -r -p -k -np http://hi.baidu.com/phps , -r 表示递归下载,会下载所有的链接,不过要注意的 ...
- 如何解决Python.h:No such file or directory
安装python2.7对应的dev sudo apt-get install python-dev 安装python3.6对应的dev sudo apt-get install python3-dev
- Hadoop 2:Mapper和Reduce
Hadoop 2:Mapper和Reduce Understanding and Practicing Hadoop Mapper and Reduce 1 Mapper过程 Hadoop将输入数据划 ...
- WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系
WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系: 1.Canvas/WrapPanel控件: 其子控件的HorizontalAlign ...
- Elasticsearch 数据搜索
ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API.本篇就通过一些简单的搜索命令,帮助你理解ES的相关应用.虽然不能让你理解ES的原理设计,但是可以帮助你理解ES,探寻更多的 ...
- RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用
Click Element关键字用来模拟点击APP界面上的一个元素,该关键字接收一个参数[ locator ] ,这里的locator指的是界面元素的定位方式. 示例1:使用Click Element ...
- C#仪器数据文件解析-XPS文件
XPS为微软推出的类似于Adobe PDF的一种文件格式,个人认为XPS很好,但毕竟PDF已经被大家所熟知,因此XPS的使用很少,也少有仪器数据输出为该格式. XPS百度百科:https://baik ...
- 入门VMware Workstation下的Debian学习之基本命令(二)
本章记录如何在Linux终端进行命令操作命令下载路径,模拟终端.dkpg管理软件包.用户组和用户管理.文件属性.文件与目录管理.查看磁盘使用量. (1)命令下载路径: wegt 路径; (2)模拟终端 ...
- 读Zepto源码之fx_methods模块
fx 模块提供了 animate 动画方法,fx_methods 利用 animate 方法,提供一些常用的动画方法.所以 fx_methods 模块依赖于 fx 模块,在引入 fx_methods ...
- python之爬虫
一.从网页爬下字符串清除特殊字符 import re def validateTitle(title): rstr = r"[\/\\\:\*\?\"\<\>\|\t] ...