MySQL实现连续日期统计

MySQL实现连续日期统计

  • 1.问题
  • 2.解决方案

1.问题

问题是这样的,我数据库里面的数据是不连续生成的。如:

SELECT  DATE_FORMAT(create_time, '%m-%d') dfc, sum(o.pay_price) price
FROM tj_order o
WHERE o.state = 9
AND o.store_id = '2c90b0fd70e1064c0170e23b83b5000a'
AND o.create_time>='2020-03-01 2020-03-01 00:00:00' 
AND o.create_time<='2020-03-17 23:59:59'
GROUP BY dfc

在这里插入图片描述
但是,我想从3月1号到17号的数据都查询出来,没有的0来代替。

2.解决方案

SELECT dts.df, IF(ps.price is NULL, 0, ps.price) price 
	FROM (SELECT
	        --date_format格式化日期,date_add增加减少时间间隔
				date_format( date_add( '2020-03-01 00:00:00', INTERVAL + t.help_topic_id DAY ), '%m-%d' ) AS 'df' 
			FROM
			-- 这里利用了mysql自带的表,最大642,你也可以自己定义一个表。
				mysql.help_topic t 
			WHERE
			-- 这里的16可以通过java计算两个日期的天数传过来。
				t.help_topic_id <= 16 ) as dts
	LEFT JOIN (SELECT  DATE_FORMAT(create_time, '%m-%d') dfc, sum(o.pay_price) price
	FROM tj_order o
	WHERE o.state = 9
	AND o.store_id = '2c90b0fd70e1064c0170e23b83b5000a'
	AND o.create_time>='2020-03-01 2020-03-01 00:00:00' 
	AND o.create_time<='2020-03-17 23:59:59'
	GROUP BY dfc) as ps
ON ps.dfc = dts.df
ORDER BY dts.df

MySQL实现连续日期统计_第1张图片

你可能感兴趣的:(常见问题)