mysql根据时间统计数据(建立时间临时辅助表)

时间:2024-05-19 19:42:18

我们平时开发中偶尔会遇到统计,但是有时候根据时间统计的时候,有些时间内数据为空,这时候我们前端的开发人员不知道具体是那一天(或者别的时间点),这个时候我们需要一张时间的辅助表 ,通过和时间辅助表联查获得那一天数据为空的时间

1:建表

DROP TABLE IF EXISTS `t_calendar_auxiliary`;
CREATE TABLE `t_calendar_auxiliary` (
  `i` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日历辅助表';

2:往表里面添加数据
-- Records of t_calendar_auxiliary
INSERT INTO `t_calendar_auxiliary` VALUES ('0');
INSERT INTO `t_calendar_auxiliary` VALUES ('1');
INSERT INTO `t_calendar_auxiliary` VALUES ('2');
INSERT INTO `t_calendar_auxiliary` VALUES ('3');
INSERT INTO `t_calendar_auxiliary` VALUES ('4');
INSERT INTO `t_calendar_auxiliary` VALUES ('5');
INSERT INTO `t_calendar_auxiliary` VALUES ('6');
INSERT INTO `t_calendar_auxiliary` VALUES ('7');
INSERT INTO `t_calendar_auxiliary` VALUES ('8');
INSERT INTO `t_calendar_auxiliary` VALUES ('9');

3:通过CROSS JOIN(笛卡尔乘积) 将两个表乘起来

SELECT
    adddate( '2018-09-01', numlist.id ) AS date_day
FROM
    (
SELECT
    n1.i + n10.i * 10 + n100.i * 100 AS id
FROM
    t_calendar_auxiliary n1
    CROSS JOIN t_calendar_auxiliary AS n10
    CROSS JOIN t_calendar_auxiliary AS n100
    ) AS numlist
WHERE
    adddate( '2018-09-01', numlist.id ) <= '2018-09-07'

 

4:返回结果:

mysql根据时间统计数据(建立时间临时辅助表)

 

5,通过开始时间和结束时间往时间辅助表里面添加数据

mysql根据时间统计数据(建立时间临时辅助表)

 

6:MySQL的多表查询(笛卡尔积原理)

  1. 先确定数据要用到哪些表。
  2. 将多个表先通过笛卡尔积变成一个表。
  3. 然后去除不符合逻辑的数据(根据两个表的关系去掉)。
  4. 最后当做是一个虚拟表一样来加上条件即可。