mysql生成日期的辅助表
为了解决mysql按日期分组查询统计的时候,没有数据补0。可以生成连续的时间表格来辅助查询
* 生成按天的数据
* 每一个小时为一个分段 生成如下辅助表
*代码如下
CREATE TABLE num ( i INT );
-- 创建一个表用来储存0-9的数字
INSERT INTO num ( i )
VALUES
( 0 ),
( 1 ),
( 2 ),
( 3 ),
( 4 ),
( 5 ),
( 6 ),
( 7 ),
( 8 ),
( 9 ); -- -------------------------------------------------------------- CREATE TABLE
IF
NOT EXISTS calendar ( datelist date, datehour datetime ); -- --------------------------------------------------------------
INSERT INTO calendar ( datelist ) SELECT -- 生成按天的数据
adddate( ( -- 这里的起始日期,你可以换成当前日期
DATE_FORMAT( "2018-11-10", '%Y-%m-%d' ) ), numlist.id ) AS `date`
FROM
(
SELECT
n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS n100
CROSS JOIN num AS n1000
CROSS JOIN num AS n10000
) AS numlist; -- --------------------------------------------------------------
INSERT INTO calendar ( datehour ) SELECT -- 生成按小时的数据
DATE_ADD( ( DATE_FORMAT( "2018-11-10", '%Y-%m-%d' ) ), INTERVAL numlist.id HOUR ) AS `date`
FROM
(
SELECT
n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 AS id
FROM
num n1
CROSS JOIN num AS n10
CROSS JOIN num AS n100
CROSS JOIN num AS n1000
CROSS JOIN num AS n10000
) AS numlist;
* 按天查询
SELECT
date( datelist ) datas,
count( * ) - 1 AS counts
FROM
(
SELECT
datelist
FROM
calendar
WHERE
( '2018-11-17' <= date( datelist ) )
AND ( date( datelist ) <= '2018-11-19' ) UNION ALL
SELECT
createtime
FROM
snap_face
LEFT JOIN device ON snap_face.deviceID = device.id
WHERE
( '2018-11-17' <= date( snap_face.createtime ) )
AND ( date( snap_face.createtime ) <= '2018-11-19' )
) temp
GROUP BY
datas
ORDER BY
datas;
* 按小时查询
SELECT
DATE_FORMAT(datehour,'%Y-%m-%d %H') datas,
count( * ) - 1 AS counts
FROM
(
SELECT
DATE_FORMAT(datehour,'%Y-%m-%d %H') datehour
FROM
calendar
WHERE
( '2018-11-17' <= date( datehour ) )
AND ( date( datehour ) <= '2018-11-19' ) UNION ALL
SELECT
DATE_FORMAT(createtime,'%Y-%m-%d %H')
FROM
snap_face
LEFT JOIN device ON snap_face.deviceID = device.id
WHERE
( '2018-11-17' <= date( snap_face.createtime ) )
AND ( date( snap_face.createtime ) <= '2018-11-19' )
) temp
GROUP BY
datas
ORDER BY
datas;
mysql生成日期的辅助表的更多相关文章
- MySql 生成日期随机数
select DATE_ADD(sd, INTERVAL FLOOR(1+ RAND() * ((ABS(UNIX_TIMESTAMP(ed) - UNIX_TIMESTAMP(sd))) - 1)) ...
- mysql 日期辅助表
MySQL 生成日期表 #.创建一个num表,用来存储数字0 CREATE TABLE num (i int); #.在num表中生成0 ), (), (), (), (), (), (), (), ...
- MySQL 如何生成日期表
MySQL 如何生成日期表 在开发过程中,经常会遇到统计问题,通常交易信息都不是连续的,此时,统计出来的数据都是不连续的,所以提前生成一个时期表,当没有交易数据的时候填充0,就可以了,下面是生成日期表 ...
- SQL Server 怎样生成序列号(虚拟数字辅助表)
</pre><pre name="code" class="sql">--生成一个"序列" 或者说生成一个" ...
- 【MYSQL 清空所有的的表中的数据的SQL的生成】
MYSQL 清空所有的的表中的数据的SQL的生成 select Concat('TRUNCATE TABLE ', TABLE_NAME, ';') from INFORMATION_SCHEMA.T ...
- PowerBI 应用时间智能(生成日期表)
简介 Power BI Desktop -是一款由微软发布的自助式商业智能工具,功能强大.易于使用.其中还可以通过微软云连多个数据源并且使用数据源来创建可视化表盘. 但是几乎所有的BI都需要展示如何随 ...
- Mysql 生成指定时间段内的所有日期
DELIMITER $$ DROP PROCEDURE IF EXISTS create_calendar $$ CREATE PROCEDURE create_calendar (s_date DA ...
- 使用CTE生成辅助表(数字或时间)等
数字辅助表: , ;WITH Digital_Rangs(Digital) AS ( SELECT @start_digital UNION ALL FROM [Digital_Rangs] WHER ...
- mysql的分区和分表
分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中. mysql支持的分区类型包括Range.List.Hash.Key,其中Range比较常用: RANGE分区:基于属于一个给定连续区 ...
随机推荐
- java游戏开发杂谈 - 游戏物体
现实生活中,有很多物体,每个物体的长相.行为都不同. 物体存在于不同的空间内,它只在这个空间内发生作用. 物体没用了,空间就把它剔除,不然既占地方,又需要花精力管理. 需要它的时候,就把它造出来,不需 ...
- 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书
缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5>前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改, ...
- API做翻页的两种思路
在开发API的时候,有时候数据太多了,就需要分页读取. 基于偏移量的分页(Offset-based) 这种方式就是会提供一个每页笔数(page size)来定义返回条目的最大数,提供一个页数(page ...
- android双待手机获取每一张SIM卡的imei
/** * create a TelephonyInfo.java class */import java.lang.reflect.Method; import android.content.Co ...
- 面试挂在了 LRU 缓存算法设计上
好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了.当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least recently used) 缓存 ...
- 为什么VUE注册组件命名时不能用大写的?
这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的, ...
- CODING Pages 服务全面升级,更快更稳更可靠!
尊敬的 CODING 用户: 您好! 由于原上游服务商无法满足 CODING Pages 日益增长的用户量以及访问速度需求,同时提供的 DDoS 解决方案无法支撑大型 DDoS 攻击,给 CODING ...
- SQL server 表信息查询
一.查看所有表的行数select a.name as '表名',b.rows as '表数据行数'from sysobjects a inner join sysindexes bon a.id = ...
- Python3 中 爬网页 \uxxx 问题
今天上午在没事儿爬一下我自己的博客主页文章练习下.在写入的时候遇到的编码问题,折腾了半天 ,记录一下 import urllib.request import time str1 = urllib.r ...
- 使用CAS实现无锁列队-链表
#include <stdlib.h> #include <stdio.h> #include <pthread.h> #include <iostream& ...