欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL实现连续日期统计

程序员文章站 2024-01-10 14:58:34
...

MySQL实现连续日期统计

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

MySQL实现连续日期统计
但是,我想从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实现连续日期统计