mysql统计天、周、月、季度、半年、年
- 之前在网上搜索按时间统计,发现不是很全 ,接着别人的思路进行延伸下,
- mysql统计天、周、月、季度、半年、年
- 前期工作创建辅助表
CREATE TABLE num (i INT);
INSERT INTO num (i) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); - 创建要查询的表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
`create_time` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('', '小南', '男', '湖南湘潭', '2019-07-01');
INSERT INTO `user` VALUES ('', '小谭', '男', '湖南湘潭', '2019-07-02');
INSERT INTO `user` VALUES ('', '小梅', '女', '广东梅县', '2019-07-01');
INSERT INTO `user` VALUES ('', '小仪', '女', '四川仪陇', '2019-05-10');
INSERT INTO `user` VALUES ('', '小蓝', '女', '上海嘉定', '2019-11-11');
INSERT INTO `user` VALUES ('', '小苍', '男', '湖南湘潭', '2018-06-01');
INSERT INTO `user` VALUES ('', '小萨', '男', '湖南湘潭', '2018-01-02');
INSERT INTO `user` VALUES ('', '小静', '女', '广东梅县', '2018-06-01');
INSERT INTO `user` VALUES ('', '大幂幂', '女', '四川仪陇', '2019-03-10');
INSERT INTO `user` VALUES ('', '宋小宝', '女', '上海嘉定', '2019-05-11');
按天统计
SELECT
temp.date,
COALESCE (u.unmber, 0) 'number'
FROM
(
SELECT
adddate('2019-07-01', numlist.id) AS 'date'
FROM
(
SELECT
n1.i + n10.i * 10 + n100.i * 100 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS n100
) AS numlist
WHERE
adddate('2019-07-01', numlist.id) < date_add('2019-07-05',INTERVAL 1 DAY)
) temp
LEFT JOIN (
SELECT
LEFT (create_time, 10) AS udate,
count(create_time) unmber
FROM
user
WHERE
1=1
GROUP BY
udate
) u ON temp.date = u.udate
ORDER BY
temp.date;
按周统计
SELECT
temp.monthWeek,
COALESCE (plan.number, 0) 'number'
FROM
(
SELECT
YEARWEEK(
adddate('2019-07-01', INTERVAL numlist.id WEEK),1 ) AS 'date',
CONCAT(
MONTH (date_format('2019-07-01', '%Y-%m-%d')),'月第', numlist.id + 1,'周') AS 'monthWeek'
FROM
(
SELECT
*
FROM
(
SELECT
n1.i + n10.i * 10 AS id
FROM
num n1
CROSS JOIN num AS n10
) a
WHERE
a.id <= 11
) AS numlist
WHERE
adddate('2019-07-01',INTERVAL numlist.id WEEK ) <= '2019-07-31'
) temp
LEFT JOIN (
SELECT
YEARWEEK( date_format(create_time, '%Y-%m-%d'), 1) date,
count( YEARWEEK(date_format(create_time, '%Y-%m-%d'),1 ) ) number
FROM
USER
WHERE
1 = 1
AND create_time >= '2019-07-01'
AND create_time <= '2019-07-31'
GROUP BY
YEARWEEK(
date_format(create_time, '%Y-%m-%d'),
1
)
) plan ON temp.date = plan.date;
按月统计
SELECT
LEFT (temp.date, 7) monthStr,
COALESCE (u.unmber, 0) 'number'
FROM
(
SELECT
adddate('2019-01-01',INTERVAL numlist.id MONTH ) AS 'date'
FROM
(
SELECT
*
FROM
(
SELECT
n1.i + n10.i * 10 AS id
FROM
num n1
CROSS JOIN num AS n10
) a
WHERE
a.id <= 11
) AS numlist
WHERE
adddate('2019-01-01',INTERVAL numlist.id MONTH) <= '2019-12-3'
) temp
LEFT JOIN (
SELECT
LEFT (create_time, 7) AS udate,
count(create_time) unmber
FROM
user
WHERE
1=1
GROUP BY
udate
) u ON LEFT (temp.date, 7) = u.udate
ORDER BY
temp.date
按季度统计
SELECT
temp.monthWeek,
COALESCE(plan.number, 0) 'number'
FROM
(
SELECT
QUARTER(adddate('2019-01-01', INTERVAL numlist.id QUARTER )) AS 'date',
CONCAT(year(date_format('2019-01-01','%Y-%m-%d')), '年第', numlist.id +1, '季度') AS 'monthWeek'
FROM
(
SELECT
*
FROM
(
SELECT
n1.i + n10.i * 10 AS id
FROM
num n1
CROSS JOIN num AS n10
) a
WHERE
a.id <= 11
) AS numlist
WHERE
adddate('2019-01-01',INTERVAL numlist.id QUARTER) <= '2019-12-31'
) temp
LEFT JOIN (
SELECT QUARTER(date_format(create_time,'%Y-%m-%d')) date,
count(QUARTER(date_format(create_time,'%Y-%m-%d'))) number
FROM user
where 1=1
and create_time >= '2019-01-01'
and create_time <= '2019-12-31'
group by QUARTER(date_format(create_time,'%Y-%m-%d'))
) plan
on temp.date = plan.date
按半年统计
SELECT
bannian 'content',
COALESCE (u.unmber, 0) 'number'
FROM
(
SELECT
adddate( '2018-01-01',INTERVAL numlist.id MONTH) AS 'date',
case DATE_FORMAT(adddate( '2018-01-01',INTERVAL numlist.id MONTH),'%c')
when 7 then '下半年'
when 8 then '下半年'
when 9 then '下半年'
when 10 then '下半年'
when 11 then '下半年'
when 12 then '下半年'
else '上半年' end
as bannian
FROM
(
SELECT * FROM(
SELECT
n1.i + n10.i * 10 AS id
FROM
num n1
CROSS JOIN num AS n10
) a
WHERE a.id <= 11
) AS numlist
WHERE
adddate('2018-01-01',INTERVAL numlist.id MONTH) <= '2018-12-31'
GROUP BY bannian
) temp
LEFT JOIN (
SELECT
case DATE_FORMAT(create_time,'%c')
when 7 then '下半年'
when 8 then '下半年'
when 9 then '下半年'
when 10 then '下半年'
when 11 then '下半年'
when 12 then '下半年'
else '上半年' end as udate,
count(create_time) unmber
FROM user
WHERE 1=1
and date_format(create_time,'%Y-%m-%d') >='2018-01-01'
and date_format(create_time,'%Y-%m-%d') <= '2018-12-31'
GROUP BY udate
) u ON bannian = u.udate ORDER BY bannian asc;
按年统计(近五年)
SELECT
COALESCE(plan.number, 0) 'number',
temp.date fiveYear
FROM
(
SELECT
Year(adddate('2015-01-01', INTERVAL numlist.id Year )) AS 'date'
FROM
(
SELECT
*
FROM
(
SELECT
n1.i + n10.i * 10 AS id
FROM
num n1
CROSS JOIN num AS n10
) a
WHERE
a.id <= 11
) AS numlist
WHERE
adddate('2015-01-01',INTERVAL numlist.id Year) <= '2019-12-31'
) temp
LEFT JOIN (
SELECT Year(date_format(create_time,'%Y-%m-%d')) date,
count(Year(date_format(create_time,'%Y-%m-%d'))) number
FROM user
where 1=1
group by year(date_format(create_time,'%Y-%m-%d'))
) plan
on temp.date = plan.date
order by temp.date asc
mysql统计天、周、月、季度、半年、年的更多相关文章
- mysql按日/周/月统计
一.mysql按日统计 ) count ' and start_time > '2017-06-28' group by days; 二.mysql按周统计 ) ' group by weeks ...
- java获取当前时间的年周月季度等的开始结束时间
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created b ...
- MySql查询日周月
常用计算日期的函数 日 date(日期) = CURDATE() 自然周 YEARWEEK(date_format(日期,'%Y-%m-%d') , 1) = YEARWEEK(now() , 1) ...
- mysql 查询,天,周,月等写法
1.查询当天的数据 select * from 表名 where TO_DAYS(时间字段)=TO_DAYS(NOW()); 2.查询当周的数据 select * from 表名 where YEAR ...
- mysql 时间戳 按周、日、月 统计方法 附 date格式
create_time时间戳格式 SELECT FROM_UNIXTIME(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY w ...
- mysql中增加某一时间段内的时间数据(包含:时间、年、月、日、第几周、季度)
创建表dim_date: create table `dim_date` ( `year` int (20), `month` int (20), `day` int (20), `week` int ...
- mysql如何按周统计数据?
转自:https://www.cnblogs.com/wanghetao/p/3920124.html MySql 按周/月/日统计数据的方法 知识关键词:DATE_FORMAT select DA ...
- pg按日,周,月进行数据统计
pg数据库按周,月统计数据 SELECT date_trunc('WEEK', insert_time) as insertDate, SUM(data_increment) as dataTotal ...
- Java统计用户年/月/周/日网站访问量
一:准备工作,引入相关依赖: 二:运行效果图: 下一次访问 三:具体代码如下 (1):CountObjectInfo.java package cn.csrc.base.count; import ...
随机推荐
- 性能测试:深入理解线程数,并发量,TPS,看这一篇就够了
并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标. 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数,这一表述正确吗? ...
- springboot+swagger接口文档企业实践(下)
目录 1.引言 2. swagger接口过滤 2.1 按包过滤(package) 2.2 按类注解过滤 2.3 按方法注解过滤 2.4 按分组过滤 2.4.1 定义注解ApiVersion 2.4.2 ...
- 【Android - 自定义View】之View的layout过程解析
layout(布局)的作用是ViewGroup用来确定子元素的位置,在这个过程中会用到两个核心方法: layout() 和 onLayout() .layout()方法用来确定View本身的位置,on ...
- rsync通过服务同步、Linux系统日志、screen工具 使用介绍
第8周5月15日任务 课程内容: 10.32/10.33 rsync通过服务同步10.34 linux系统日志10.35 screen工具 扩展1. Linux日志文件总管logrotate http ...
- 转:Maven的默认中央仓库以及修改默认仓库&配置第三方jar包从私服下载
当构建一个Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下: 1.从本地资源库中查找并获得依赖包,如果没有,执行第2步. 2.从Maven默认中央仓库中查找并获得依赖包 ...
- Eclipse 安装 ShellEd 不成功的解决办法
我是Win7, 64位的操作系统,Eclipse 版本是 32位的eclipse-java-luna-SR1-win32.在安装 ShellEd 时,一直安装不成功,前后出现两种现象: 1. 在按照网 ...
- SpringBoot-自动配置原理(七)
自动配置原理 本节内容分为三个部分 配置文件的写法 分析自动配置原理 @Conditional 一. 配置文件的写法 配置文件可以写什么? 是与/META-INF/spring.factories配置 ...
- iOS app反编译
对于APP store 上的应用都是加密的了,反编译起来有难度. 对于自己用xcode 编译的ipa 或者是其他渠道下载的ipa包都可以使用反编译工具进行反编译. https://cnbin.gith ...
- 详解TCP连接的“三次握手”与“四次挥手”(下)
上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手&q ...
- leaflet 结合 geoserver 实现地图空间查询(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...