说我有一个数据集:
|dateid | value |
|20150101 | 1 |
|20150102 | 2 |
|20150103 | 3.1 |
|20150104 | 4.3 |
|20150105 | 3.1 |
|20150106 | 1 |
|20150107 | 1 |
|20150108 | 1 |
|.... | |
|.... | ... |
|20151001 | 10.3|
我想根据日期范围查询过去7天每的平均值。
对于20150707和20150730的dateid,当我选择20150707的行时,我还需要20150701和20150707之间的平均值((1 + 2 + 3.1 + 4.3 + 1 + 1 + 1 + 1)/ 7)以及20150707(1)的值如:
select dateid, value , avg(value) as avg_past_7 from mytable where dateid between 20150707 and 20150730GROUP BY every past_7days.
当记录小于7行时,平均值保持为空。 这意味着如果我在表中只有20150707-20150730的记录,那么20150707/8/9/10/11/12的past_7_day平均值仍为空。
答案 0 :(得分:0)
相关的子选择:
2015-12-01
答案 1 :(得分:0)
使用 Date_SUB <7天的时间间隔
答案 2 :(得分:0)
我通过以下方式解决问题:
select t1.dateid, t1.value, if(count(1)>=7,avg(t2.value),null)
from mytable t1 , mytable t2
where t2.dateid between DATE_SUB(date(t1.dateid),INTERVAL 6 day)+0 and t1.dateid and
t1.dateid between 20150105 and 20150201
group by t1.dateid ,t1.value
order by dateid;