mysql 构造连续的日期
需求,我想以 年-月-日的格式,统计自 2019-08-20日 前10天的记录数,如果该天没有任何一条记录,则给予0
原始数据-》我想要的结果集数据
==============》
1、测试数据
drop table if exists test2;
create table test2(id int primary key auto_increment,curr_date datetime);
insert into test2(curr_date) values('2019-08-11 10:12:30'),('2019-08-14 10:12:30'),('2019-08-16 10:12:30');
select * from test2;

问题1:如果我们直接格式化时间到 年-月-日 的格式,那么没有记录的天数就会被漏掉;
select date_format(curr_date,'%Y-%m-%d') as 'curr_date',
count(id) as 'record_count'
from test2 group by date_format(curr_date,'%Y-%m-%d');

结果是这样的,就没有达到我们的效果。
2、了解一个mysql数据库下的自带表
mysql.help_topic;
如下图,它有一个从0~657的顺序ID序列,一些短期的操作可以借助它来完成,比如生成连续的日期。
select max(help_topic_id),min(help_topic_id),count(help_topic_id) from mysql.help_topic;

3、生成连续的日期
(1)我们可以借助 2中的mysql.help_topic表,和一些固定的参数和时间函数配合即可
(2)我们也可以自己构造一个临时表,构造一个足够大的id顺序序列。
这个方法也很简单但是有点费事还要额外去生成,如果657个自增id序列已经够用推荐使用第1种(这种就不演示了,原理一样。)
-- 获取自'2019-08-20'的前10天
select date_format(date_add('2019-08-20',interval -t.help_topic_id day),'%Y-%m-%d') as 'curr_date'
from mysql.help_topic t where t.help_topic_id<=10;

这就出来了
4、最终聚合,完成需求
/*
-- 获取自某天开始的前10天
select date_format(date_add('2019-08-20',interval -t.help_topic_id day),'%Y-%m-%d') as 'curr_date' from mysql.help_topic t where t.help_topic_id<=10;
-- 数据表根据时间 年-月-日 格式分组统计行数
select date_format(curr_date,'%Y-%m-%d') as 'curr_date',count(id) as 'record_count' from test2 group by date_format(curr_date,'%Y-%m-%d');
*/
-- 最终整合
select t1.curr_date,ifnull(t2.record_count,0) as record_count from
(
select date_format(date_add('2019-08-20',interval -t.help_topic_id day),'%Y-%m-%d') as 'curr_date'
from mysql.help_topic t where t.help_topic_id<=10
) t1
left join
(
select date_format(curr_date,'%Y-%m-%d') as 'curr_date',count(id) as 'record_count'
from test2 group by date_format(curr_date,'%Y-%m-%d')
) t2
on t1.curr_date=t2.curr_date
order by t1.curr_date 最终聚合结果如下左图,数据表聚合如下右图,构造连续日期如下中间图

如果自己构造中间表,只是把 mysql.help_topic 表 替换成你自己构造的顺序序列表中间表即可。
mysql 构造连续的日期的更多相关文章
- MySql和Oracle的日期转换到底有哪些不同?我们来比较一下
1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yy ...
- mysql计算连续天数,mysql连续登录天数,连续天数统计
mysql计算连续天数,mysql连续登录天数,连续天数统计 >>>>>>>>>>>>>>>>>& ...
- MySQL字符串函数、日期时间函数
MySQL字符串函数.日期时间函数 一.常见字符串函数: 1.CHAR_LENGTH 获取长度(字符为单位) 2.FORMAT 格式化 3.INSERT 替换的方式插入 4.INSTR 获取位 ...
- 在mysql数据库中关于日期时间字段的处理
在mysql数据库中关于日期时间字段的处理 在开发中,日期时间字段一般有如下几种设计 假设要获取2013-08-15日到2013-08-16日之间的记录 1. 直接使用日期时间类字段 相关sql语句如 ...
- MySQL的时间、日期型
MySQL的时间.日期型 MySQL中表示时间值的有DATE.时间类型为DATETIME.DATE.TIMESTAMP.TIME和YEAR.每个时间类型有一个有效值范围和一个"零" ...
- mysql的五种日期和时间类型【转载】
[mysql的五种日期和时间类型] mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期 ...
- MySql计算两个日期的时间差函数
MySql计算两个日期时间的差函数: 第一种:TIMESTAMPDIFF函数,需要传入三个参数,第一个是比较的类型,可以比较FRAC_SECOND.SECOND. MINUTE. HOUR. DAY. ...
- MySQL的五种日期和时间类型
MySQl中有多种表示日期和时间的数据类型.其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践.它们的对比如下:YEAR ,字节数 ...
- MySql判断汉字、日期、数字的具体函数
几个平常用的mysql函数,MySql判断汉字.日期.数字的具体函数分享给大家,具体内容如下 1.判断字符串是否为汉字 返回值:1-汉字 0-非汉字 ? 1 2 3 4 5 6 7 8 9 10 11 ...
随机推荐
- Mockito 2 让我们校验一些行为
在下面的示例中,我们将会模拟(Mock)一个 List 列表. 这是因为绝大部分的人对列表这个接口比较熟悉(例如 add(), get(), clear() 方法). 在实际情况中,请不要 mock ...
- 【CUDA 基础】3.2 理解线程束执行的本质(Part I)
title: [CUDA 基础]3.2 理解线程束执行的本质(Part I) categories: CUDA Freshman tags: 线程束分化 CUDA分支 toc: true date: ...
- HDU 6154 CaoHaha's staff(2017中国大学生程序设计竞赛 - 网络选拔赛)
题目代号:HDU 6154 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 CaoHaha's staff Time Limit: 2000/1 ...
- Android中定义广播监听,其他页面发送
private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...
- Android_(自动化)自动获取手机电池的剩余电量
自动获取手机电池的剩余电量 通过使用BroadcastReceiver的特性来获取手机电池的电量,注册BroadcastReceiver时设置的IntentFilter来获取系统发出的Intent.A ...
- C++入门经典-例8.10-实现抽象类中的成员函数
1:抽象类通常作为其他类的父类,如果从抽象类派生的子类是抽象类,则子类必须实现父类中的所有纯虚函数.代码如下: // 8.10.cpp : 定义控制台应用程序的入口点. // #include &qu ...
- Fragment全解析系列
(一):那些年踩过的坑 开始之前 最新版知乎,单Activity多Fragment的架构,响应可以说非常“丝滑”,非要说缺点的话,就是没有转场动画,并且转场会有类似闪屏现象.我猜测可能和Fragmen ...
- 理解MVC/MVP/MVVM的区别
转载至[http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html] MVC 所有的通信都是单向的. M(Model)V(View)C(Contro ...
- 标准C++常用头文件及描述
#include <algorithm> //STL 通用算法 #include <bitset> //STL 位集容器 #include <cctype> //字 ...
- flutter 延时函数delay Loading页面
loading 页面 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class Lo ...