mysql 如何查询从当天时间起,每隔5天内的价格平均值?

mysql 如何查询从当天时间起,30天内,每隔5天内的价格平均值?
有可能某一天没有数据,字段:日期-gmt,价格-price

举例:
今天是9-4日,需要返回
8-30 、 平均价格,
8-25、平均价格,
8-20、平均价格,
这里8-30显示的平均值,对应的是8-30到9-3共5天的价格平均值
这里8-25显示的平均值,对应的是8-25到8-29共5天的价格平均值

SQL基础薄弱,哪位同学来挑战一下

最简单的方式就是用(当前时间 - 目标时间 ) / 5,然后向上取整,这样就把时间分成了每5天一段,同一段内的编号interval_5_day_cnt是一致。
然后按各段的编号取均值,可以计算出来每段的平均值。
最后根据段编号可以反推出来当前段的起始日期

select DATE_sub(CURDATE(),INTERVAL interval_5_day_cnt*5 day) as gmt_begin,avg_price
from
(
    select ceil(DATEDIFF(CURDATE(),gmt)/5) as interval_5_day_cnt,avg(price) as avg_price
    from test
    group by ceil(DATEDIFF(CURDATE(),gmt)/5) 
) t
;

img

如果少一天就除几天的
select AVG(price) from test_price where CURDATE()<=gmt and gmt<=DATE_ADD(CURDATE(), INTERVAL 4 DAY)

img

img

img

img


如果少一天还是除5的
select sum(price)/5 from test_price where CURDATE()<=gmt and gmt<=DATE_ADD(CURDATE(), INTERVAL 4 DAY)

img

CTE递归实现每次减少5天查询该时间段的数据,然后以深度作为group key计算平均值

WITH RECURSIVE CTE(`start`, `end`, `depth`) AS (
SELECT DATE_ADD(CURRENT_DATE(), INTERVAL -5 DAY), DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY), 1 UNION ALL
SELECT DATE_ADD(`start`, INTERVAL -5 DAY), DATE_ADD(`start`, INTERVAL -1 DAY), `depth` + 1 FROM CTE WHERE `depth` < 3
) SELECT * FROM CTE

img

每5天的分组

SELECT MAX(gmt) as 时间,AVG(price) as 每组平均数 FROM 表名 group by floor(DAY( gmt)/ 5) * 10 
如果是算从当天起的那一天算起算5天的话
那就用时间差来除以5
那就是 
SELECT MAX(gmt) as 时间,AVG(price) as 每组平均数 FROM 表名 group by floor(DATEDIFF(CURDATE(),gmt)/ 5) * 10