Mysql中查询连续一段时间内统计数据

在一次生产环境中遇到统计当前日期的前10天每天的订单量,一开始想到的就是根据日期进行分组统计,但在查询的时候会存在一个问题:有可能某一天没有订单交易,日期分组中就不会出现,导致查询出来的数据日期不连续。
如果在代码中进行处理让日期变得连续,需要写一大堆代码,显然代码不够优雅。所以思来想去还是打数据库的主意,能不能通过数据库进行连续日期的构造,这样进行关联查询就可以避免上述的问题。

  • 首先从用户自定变量构建一个序列开始讲起吧
-- 构建一个序列
select @i := @i+1 as 'NO' from mysql.help_topic,(select @i := 0) t where @i < 10;

下面是执行结果

通过构建这个简单的序列很快就能想到,通过同样的方法构建一个连续的日期序列自然不在话下。

  • 接下来通过用户自定变量查询出当前日期前N天的连续日期列表
-- 构建一个日期序列
select @i := @i+1 as 'NO',DATE(DATE_SUB(CURRENT_DATE,INTERVAL @i DAY)) as 'date' from mysql.help_topic,(select @i := 0) t where @i < 10;

下面是执行结果

很显然通过同样的方式构建出了连续的日期序列,离想要的结果又进了一步,到了这里自然而然的就想到通过左关联查询业务分组后的数据就能得到想要的结果了。

  • 通过关联查询获取想要的结果
-- 实际业务
SELECT t1.date,ifnull( t2.num, 0 ) AS num  FROM (SELECT @i := @i + 1 AS NO, DATE( DATE_SUB( CURRENT_DATE, INTERVAL @i DAY ) ) AS date FROM mysql.help_topic, (SELECT @i := 0) t WHERE @i < 10 ORDER BY date ) t1
LEFT JOIN
(SELECT DATE( create_time ) AS date, count( 1 ) AS num FROM `XXX_order` WHERE create_time > DATE( DATE_SUB( CURRENT_DATE, INTERVAL 10 DAY ) ) GROUP BY date) t2 ON t1.date = t2.date

最终结果出来了

写到这里大功告成,通过这种方法查询连续的一段时间内统计数据很方便,既满足业务需求又不用在程序中写多余的代码,在图表中可以直接使用。
举一反三查询连续的月份、年份统计数据同样一招搞定,再也不用在程序中去一大堆逻辑代码了。

参考MySql中用户定义的变量

Mysql中查询连续一段时间内统计数据相关推荐

  1. mysql查询某一段时间内的数据

    SELECT TYPE FROM T_DEVICE WHERE CREATE_TIME BETWEEN '2018-05-30 14:00:00' AND  '2018-05-30 16:00:00' ...

  2. mysql 查询每人每天_PHP+MySQL实现对一段时间内每天数据统计优化操作实例

    本文实例讲述了PHP+MySQL实现对一段时间内每天数据统计优化操作.分享给大家供大家参考,具体如下: 在互联网项目中,对项目的数据分析必不可少.通常会统计某一段时间内每天数据总计变化趋势调整营销策略 ...

  3. mysql 优化300例_PHP+MySQL实现对一段时间内每天数据统计优化操作实例

    本文实例讲述了PHP+MySQL实现对一段时间内每天数据统计优化操作.分享给大家供大家参考,具体如下: 在互联网项目中,对项目的数据分析必不可少.通常会统计某一段时间内每天数据总计变化趋势调整营销策略 ...

  4. mysql统计每半小时内的数据(查寻某段时间内的数据)

    mysql统计每半小时内的数据(查寻某段时间内的数据) 表结构 sql展示 sql说明 结果展示 思考 需求:统计某段时间内的数据,以半小时为单位统计 表结构 sql展示 SELECT @rank:= ...

  5. mysql 查询多个号段_SQL查询连续号码段实现实例

    下文将教您在数据库中如何使用SQL查询连续号码段的方法,供您参考,如果您对SQL查询方面感兴趣的话,不妨一看,对您会有所帮助. 有一个表结构, fphm,kshm 2014,00000001 2014 ...

  6. Mysql中查询速度的优化

    2019独角兽企业重金招聘Python工程师标准>>> mysql中查询速度的优化 1.查看每一个表的数据量 2.left join的时候尽量减少表的大小,通过临时表,查询条件去限制 ...

  7. 非常实用的,使用SQL查询连续号码段。(做计费系统或SP的兄弟经常会用到)...

    非常实用的,使用SQL查询连续号码段.(做计费系统或SP的兄弟经常会用到) 数据库中如何使用SQL查询连续号码段 在[Database吧]上有一则非常巧妙的SQL技巧,学习一下,记录在这里. 最初的问 ...

  8. MySQL中查询时对字母大小写的区分

    我相信很多人在mysql中查询时都遇到过mysql不区分字母大小写的情况:如以下例子: 1.SELECT * FROM `user` WHERE userpass = 'Z20'; 结果为: 2.SE ...

  9. mysql中查询一个字段属于哪一个数据库中的哪一个表的方式

    mysql中查询一个字段具体是属于哪一个数据库的那一张表:用这条语句就能查询出来,其中 table_schema 是所在库, table_name 是所在表 --mysql中查询某一个字段名属于哪一个 ...

最新文章

  1. 跟谁学这2年间做的六件事
  2. 确认过眼神(*╹▽╹*),这就是大家想要的BCH
  3. Android WebView 和 javaScript的互相调用(一)
  4. PHP中session与cookie的简单使用
  5. pythonenumapi_python模块之enum_上
  6. CATIA怎么约束快捷键_3ds Max 常用快捷键大全,你学会了吗
  7. 2020 年百度之星·程序设计大赛 - 复赛 1001Battle for Wosneth
  8. kafka-client 版本兼容问题
  9. SQL面试题:删除表中指定字段的重复数据,只保留最大的id数据
  10. OneNote2016 解决 OneNoteGem 插件 选项卡消失的问题
  11. OverflowError: Python int too large to convert to C long
  12. Java JSP技术详解:(一)JSP 简介
  13. ios:苹果手机直接安装ipa文件
  14. python判断邮箱格式是否正确_如何判断用户输入的邮箱格式是否正确?
  15. 人工智能AI的春天来临,国内惊现100多元钱的机器视觉组件,即全局曝光的高速工业相机,最高可达210帧每秒。可应用于人脸识别、机器视觉、高速运动目标的图像获取。
  16. Prometheus node_exporter报错context deadline exceeded
  17. Commerzbank和Sparkasse开始支持Apple Pay
  18. ERP财务管理系统有哪些特点
  19. gulp入门详解之基本操作
  20. 企业微信如何提高用户粘性防止粉丝流失

热门文章

  1. 关于手持设备PDA的开发
  2. sentinel降级规则
  3. robocup3d 发布比赛版本
  4. 规则在自然语言处理领域的重要地位
  5. how2heap(5):tcache_poisoning 2.31
  6. 中国 SaaS 二十年的回顾
  7. NFT Insider #59:a16z推出6亿美元基金专用于游戏初创公司,The Sandbox发布LAND持有者路线图
  8. 阿里云PHP SDK(升级版)使用说明:
  9. UE4 坐标转换 之 CAD 坐标转UE
  10. zblog mysql修改_手把手教修正zblog默认阅读量