因为业务需求,要统计每天的新增用户并且要用折线图的方式展示。

如果其中有一天没有新增用户的话,这一天就是空缺的,在绘制折线图的时候是不允许的,所有要求把没有数据的日期也要在图表显示。

查询2019-01-10------2019-01-20日的新增用户 ,查询出来是这样的。。。。。。完全不可以绘制图表

因为绘制图表要的是这样的数据

所以写了以下sql生成绘制图表的数据。

帮助有需要的人

---------------------------------------------------------------------------------------------------------------------------------------------------------

select sum(count) as count, regeistDates from (
select count(*) count, date_format(regeistDate,'%Y-%m-%d') regeistDates from t_account a
where a.regeistDate>='2018-12-21 00:00:00' and a.regeistDate<='2019-01-21 23:00:00'
GROUP BY regeistDates
UNION ALL
select @uu:=0 as count,regeistDates from (
select @num:=@num+1 as number,date_format(adddate('2018-12-21 00:00:00', INTERVAL @num DAY),'%Y-%m-%d') as regeistDates
from t_account a ,(select @num:=-1) t
where adddate('2018-12-21 00:00:00', INTERVAL @num DAY) < date_format('2019-01-21 23:00:00','%Y-%m-%d')
order by regeistDates ) rr
) sss GROUP BY sss.regeistDates ORDER BY regeistDates

---------------------------------------------------------------------------------------------------------------------------------------------------------

sql 的唯一的缺点是日期的排列是按照  t_account  这张表的行数计算的

注:

t_account    为你的数据中的一张表

select @num:=@num+1 as number,date_format(adddate('2018-12-21 00:00:00', INTERVAL @num DAY),'%Y-%m-%d') as regeistDates

from t_account a ,(select @num:=-1) t 

以上这个sql 是重点

引申:

补充按照每周每月统计

===================================按照周统计============================================

SELECT sum(count)as count, DATE_FORMAT(a.regeistDates,'%Y-%m-%d %u') as regeistDates FROM (
SELECT * FROM (
SELECT COUNT(t.id) as count ,date_format( t.regeistDate,'%Y-%m-%d') as regeistDates FROM t_account t
where  t.regeistDate>='2019-01-27 00:00:00' and t.regeistDate<='2019-03-27 00:00:00'
GROUP BY DATE_FORMAT(t.regeistDate,'%Y%u')
UNION ALL
select @uu:=0 as count,regeistDates from (
select @num:=@num+1 as number,date_format(adddate('2019-03-27 00:00:00', INTERVAL @num DAY),'%Y-%m-%d') as regeistDates
from t_order a ,(select @num:=-1) t
where adddate('2019-01-27 00:00:00', INTERVAL @num day) < date_format('2019-03-27 00:00:00','%Y-%m-%d')
order by regeistDates ) rr
) tt ORDER BY tt.regeistDates
) a GROUP BY DATE_FORMAT(a.regeistDates,'%Y%u')

=====================================按照月统计===========================================

SELECT sum(count)as count, a.regeistDates FROM (
SELECT * FROM (
SELECT COUNT(t.id) as count ,date_format( t.regeistDate,'%Y-%m') as regeistDates FROM t_account t
where t.regeistDate is not null and t.accountalias='39d0dc010ac646f88e3bf900f6fa6d33'
and t.regeistDate>='2019-01-27 00:00:00' and t.regeistDate<='2019-03-27 00:00:00'
GROUP BY DATE_FORMAT(t.regeistDate,'%Y-%m')
UNION ALL
select @uu:=0 as count,regeistDates from (
select @num:=@num+1 as number,date_format(adddate('2019-01-27 00:00:00', INTERVAL @num DAY),'%Y-%m') as regeistDates
from t_order a ,(select @num:=-1) t
where adddate('2019-01-27 00:00:00', INTERVAL @num day) < date_format('2019-03-27 00:00:00','%Y-%m-%d')
order by regeistDates ) rr
) tt ORDER BY tt.regeistDates
)a GROUP BY a.regeistDates

==================================获取日期所在周的周一日期 ===================================

SELECT t.regeistDate, DATE_ADD(date_format(t.regeistDate,'%Y-%m-%d'),INTERVAL -WEEKDAY(date_format(t.regeistDate,'%Y-%m-%d')) DAY) as regeistDates  from  t_account t

==========================================================================================

以上只是个人见解

如果您有好的方法可以在此文章下进行评论

-------------------------------------------------------

感谢帮忙的老王 。。。。。。哈哈哈

mysql 统计数据,按照日期分组,把没有数据的日期也展示出来的更多相关文章

  1. 实战:mysql统计指定架构的全部表的数据和索引大小情况-v2

    PS:第一个版本号里未做输入的schema_name和table_name推断,改动了一下!再次share! #统计指定架构的全部表的数据和索引大小情况 #tablesize.sh #!/bin/sh ...

  2. 小程序开发笔记(八)—Js数组按日期分组显示数据

    数据分组展示有两种方式,一种是后端直接传入分组格式的Json数据,另一种是我们在前端自己转换格式,这里我们在前端处理转换按日期分组的数据格式 1.例如后端返回数据格式为: [{createtime:' ...

  3. mysql按日期分组统计数据

    最近在做一个招聘网时,需要显示一个月内企业招聘信息的发布数量,按日期分组统计,刚开始是直接从源数据库表里面进行group by,但这样子就出现日期不连续的问题了,我想要的效果是,若当天没有数据,则显示 ...

  4. MySQL按日期分组并统计截止当前时间的总数(实例教程)

    MySQL按日期分组并统计截止当前时间的总数 建表语句 SET NAMES utf8mb4; ; -- ---------------------------- -- Table structure ...

  5. SQL 统计两个表的数据,按同一日期分组

    思路:把两个表的数据按日期整合到临时表在按日期分组,求和. 例子: SELECT t.dateTime AS '日期',SUM(t.money) AS '表1利息',SUM(t.interest) A ...

  6. MySQL对数据表进行分组查询

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  7. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  8. Mysql 根据时间戳按年月日分组统计

    Mysql 根据时间戳按年月日分组统计create_time时间格式SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM ...

  9. mysql按某一字段分组取最大(小)值所在行的数据

    mysql按某一字段分组取最大(小)值所在行的数据   mysql技巧--按某一字段分组取最大(小)值所在行的数据,这是mysql数据库程序员经常用到的在处理一些报表数据时候可以活用!那么猎微网将总结 ...

  10. MySQL数据中分级分组显示数据

    前面已经有了SqlServer数据分级分组显示数据了.今天又来做一个MySQL数据库中的分级分组显示,SqlServer中用到了递归,这里为了简单就直接把根的数据显示为0 ,而不用递归了. 在MySQ ...

随机推荐

  1. Docker - Image创建

    自己创建Image会有一些好处,可以选择最新的版本,而且从国内的镜像创建时更新软件也会从该镜像获取,速度更快. (1)安装debootstrap zhouh1@uhome:/media/zhouh1/ ...

  2. java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

    java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. Mapped ...

  3. Android系统固件定制方式

    target_product.mkAndroid系统在构建关于某种产品的固件时,一般会根据特定于该产品的具体target_product.mk来配置生成整个Android系统./target_prod ...

  4. VBA Promming——入门教程

    VBA Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言.主要能用来 ...

  5. 《少年先疯队》第九次团队作业:Beta冲刺第三天

    3.1 今日完成任务情况 姚玉婷:酒店系统中剩余功能的完善 马丽莎:酒店系统中管理员功能的测试 张   琼:酒店系统中会员功能的测试 孙苗坤:酒店系统中其余管理功能的测试文档的编写 3.2 成员贡献时 ...

  6. QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息

    Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...

  7. QT_6_QMainWindow

    QMainWindow 1.1. 菜单栏 1.1.1. 只有一个 1.1.2. QMenuBar *bar = MenuBar(); 1.1.3. 设置到窗口中 setMenuBar(bar); 1. ...

  8. 最小生成树 Prim算法 Kruskal算法实现

    最小生成树定义 最小生成树是一副连通加权无向图中一棵权值最小的生成树. 在一给定的无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即,而 w(u, v) 代表此边的 ...

  9. poj2368 Buttons

    题目描述 题解: 非常简单的巴什博弈问题. 简单来说保证$L+1$是$K$的因数即可. 决策是,先手取$x$个,后手就取$L+1-x$个. 那个$L>=2$真的很坑. 代码: #include& ...

  10. InnoDB INFORMATION_SCHEMA Temporary Table Info Table

    InnoDB INFORMATION_SCHEMA Temporary Table Info Table INNODB_TEMP_TABLE_INFO提供有关InnoDB实例中当前活动的用户创建的In ...