mysql查询一周内一个月内的数据,为空null没有数据记录的补0

  • Post author:
  • Post category:mysql


很多情况下,为配合前端画表格,后台需要从数据库中取出连续的数据,比如最近一周或者最近一个月的,这就要求数据不能断,必须是时间连续的,好处理

我使用的是mysql数据库,表结构如下:

t_temp
tt_id tt_date
1 2019-01-19
2 2019-01-19
2 2019-01-22
5 2019-01-23

开始时我的SQL语句是这样的

select SUM(tt_id) as sum, tt_date as date from t_temp where DATEDIFF(CURDATE(), tt_date) < 7 
group by tt_date;

结果是,没有 ‘01-21’ 与 ‘01-20’ 等记录为空的数据 ,这样的数据处理起来是不方便的

我的解决方法是这样的,先取出一段连续的时间,再 right join 这段时间表,就能把没有记录的时间取出来了。

因为时间是变化的,所以我建立一个的是数字表:假设是取最近七天的数据

num
i
0
1
2
3
4
5
6

首先取出最近一周的时间

select DATE_SUB(CURDATE(), INTERVAL n.i DAY) as date from num n;

结果:

接下来把以上两个SQL语句合成一个可以了:

select IFNULL(SUM(tt.tt_id),0) as sum, td.tdate as date from t_temp tt right join 
(select DATE_SUB(CURDATE(), INTERVAL n.i DAY) as tdate from num n) td on tt.tt_date=td.tdate 
group by td.tdate;

结果如下:



版权声明:本文为baidu_38622301原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。