• 之前在网上搜索按时间统计,发现不是很全 ,接着别人的思路进行延伸下,
  • 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统计天、周、月、季度、半年、年的更多相关文章

  1. mysql按日/周/月统计

    一.mysql按日统计 ) count ' and start_time > '2017-06-28' group by days; 二.mysql按周统计 ) ' group by weeks ...

  2. java获取当前时间的年周月季度等的开始结束时间

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created b ...

  3. MySql查询日周月

    常用计算日期的函数 日 date(日期) = CURDATE() 自然周 YEARWEEK(date_format(日期,'%Y-%m-%d') , 1) = YEARWEEK(now() , 1) ...

  4. mysql 查询,天,周,月等写法

    1.查询当天的数据 select * from 表名 where TO_DAYS(时间字段)=TO_DAYS(NOW()); 2.查询当周的数据 select * from 表名 where YEAR ...

  5. mysql 时间戳 按周、日、月 统计方法 附 date格式

    create_time时间戳格式 SELECT FROM_UNIXTIME(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY w ...

  6. mysql中增加某一时间段内的时间数据(包含:时间、年、月、日、第几周、季度)

    创建表dim_date: create table `dim_date` ( `year` int (20), `month` int (20), `day` int (20), `week` int ...

  7. mysql如何按周统计数据?

    转自:https://www.cnblogs.com/wanghetao/p/3920124.html MySql 按周/月/日统计数据的方法 知识关键词:DATE_FORMAT  select DA ...

  8. pg按日,周,月进行数据统计

    pg数据库按周,月统计数据 SELECT date_trunc('WEEK', insert_time) as insertDate, SUM(data_increment) as dataTotal ...

  9. Java统计用户年/月/周/日网站访问量

    一:准备工作,引入相关依赖: 二:运行效果图: 下一次访问 三:具体代码如下  (1):CountObjectInfo.java package cn.csrc.base.count; import ...

随机推荐

  1. jinjia2

    ansible-playbook --become --become-method=su -K copy.yml - hosts: web remote_user: ansible tasks: - ...

  2. beta week 1/2 Scrum立会报告+燃尽图 02

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 ...

  3. 2019-9-11:渗透测试,基础学习,VMware安装centos 7

    VMware Workstation 15 Pro 安装Centos 7,详细图文步骤 1,点击VMware菜单栏的“文件”-->“新建虚拟机”,选择“典型”使用向导创建虚拟机,点击“下一步” ...

  4. requests请求库练习--GitHub登录

    # coding = utf-8 """ 结合抓包工具,采用两种方法模拟登录github直接利用session登录和利用requests登录 ""&q ...

  5. 最小化安装CentOS 7 系统

    目录 CentOS 程序准备 开始安装系统 创建虚拟机 安装系统 CentOS 运维最常接触的系统就是CentOS系统,无论是版本 6 还是版本 7 而且在安装系统时,讲究最小化安装系统,之后当需要什 ...

  6. jenkins System error

    背景 在使用WAR包安装jenkins后,启动tomcat,显示启动成功,但最后提示信息如下: 04-Dec-2018 03:28:21.563 WARNING [Computer.threadPoo ...

  7. FileReader.result

    FileReader.result 该属性返回文件的内容.此属性仅在读取操作完成后才有效,并且数据的格式取决于用于启动读取操作的方法.FileReader]**result** 句法 var file ...

  8. Android触摸反馈

    事件分发 当点击事件发生时,事件最先传递给Activity,Activity会首先将事件将被所属的Window进行处理,即调用 superDispatchTouchEvent() 方法.通过观察sup ...

  9. python中random的基本用法

    那么怎么使 a 随机生成一个数值呢,来研究一下random的部分程序:python中random模块的几个函数可以随机生成数值,下面咱们看一下random的几个函数的使用方法. random()是不能 ...

  10. 2019-2020-9 20199317 《Linux内核原理与分析》第九周作业

    第8章  进程的切换和系统的一般执行过程 1  进程调度的时机 1.1  硬终端与软中断 进程调度的时机都与中断相关,中断有很多种,都是程序执行过程中的强制性转移,转移到操作系统内核相应的处理程序.中 ...