• 之前在网上搜索按时间统计,发现不是很全 ,接着别人的思路进行延伸下,
  • 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

最新文章

  1. unison+inotify
  2. 如何在ASP.NET的web.config配置文件中添加MIME类型
  3. JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件
  4. Abundant Resources
  5. 【视频教程】使用UIAutomation开发软件外挂
  6. Android Studio 的安装和配置篇(Windows篇)
  7. matlab 扩大虚拟内存
  8. Apache与Tomcat整合
  9. PHP利用微信跳转的Code参数获取用户的openid
  10. LR日志解析
  11. xCode中如何安装旧的模拟器
  12. USACO 邮票 Stamps
  13. 005dayPython学习:编写并执行Pythong代码和流程梳理
  14. Troubleshooting 10g and 11.1 Clusterware Reboots (文档 ID 265769.1)
  15. 08: vue组件
  16. vs 连接过程报错 dll 分析 ------- DLL动态链接库
  17. Java容器---基本概念
  18. ADexplorer - 用来查看AD的工具
  19. Python多版本共存管理工具之pyenv
  20. Java中short、int、long、float、double的取值范围

热门文章

  1. 2018092609-2 选题 Scrum立会报告+燃尽图 02
  2. SQL SERVER中SELECT和SET赋值相同点与不同点
  3. C#学习笔记03--循环和一维数组
  4. 为宇宙第一强的IDE干一票
  5. .net压缩文件
  6. createTextNode
  7. 安装软件包的三种方法、RPM包介绍、rpm、yum工具用法、yum搭建本地仓库
  8. exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp
  9. linux下svn服务器端的操作
  10. IDEA IntelliJ/ DataGrip 修改自动补全快捷键