功能:从test数据表中查询近一个月的统计结果,根据time进行统计,没有数据的日期自动补0。web
第一步:生成一个近一个月的表,表有两列,第一列是近一个月的时间,格式为“年-月-日”,第二列为填充的0sql
SET @i := - 1;
SELECT
date_format( DATE_SUB( NOW( ), INTERVAL ( @i := @i + 1 ) DAY ), '%Y-%m-%d' ) AS date
FROM
test
WHERE
@i <= ( SELECT DATEDIFF( NOW( ), DATE_FORMAT( DATE_SUB( NOW( ), INTERVAL 1 MONTH ), '%Y-%m-%d' ) ) )
第二步:统计test表的数据。svg
SELECT DATE_FORMAT( time, '%Y-%m-%d' ) AS date,
COUNT(1) AS value
FROM test m
WHERE m.time>= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)i
GROUP BY DATE_FORMAT( time, '%Y-%m-%d' )
第三步:将两个表左链接。code
SET @i := - 1;
SELECT
a.date as date ,
IFNULL(b.VALUE,0) as value
FROM
(
SELECT
date_format( DATE_SUB( NOW( ), INTERVAL ( @i := @i + 1 ) DAY ), '%Y-%m-%d' ) AS date
FROM
test
WHERE
@i <= ( SELECT DATEDIFF( NOW( ), DATE_FORMAT( DATE_SUB( NOW( ), INTERVAL 1 MONTH ), '%Y-%m-%d' ) ) )
) a
LEFT JOIN (
SELECT DATE_FORMAT( time, '%Y-%m-%d' ) AS date,
COUNT(1) AS value
FROM test m
WHERE m.time>= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)i
GROUP BY DATE_FORMAT( time, '%Y-%m-%d' )
) b ON a.date = b.date
ORDER BY a.date
遇到的问题:
我用这个sql语句时,只能显示29条数据。
缘由:
我得test数据集只有29条数据,INTERVAL ( @i := @i + 1 ) DAY 的做用是有一条数据就能够进行循环一次,因此个人表中最多只有29条数据,最多循环29次。因此显示29条数据。
解决办法:
能够建立一个新表,存在多条数据,在第一步时,将test替换成建立得新表,就能够显示完整。orm

被折叠的 条评论
为什么被折叠?



