我有一个measurements
表,其结构如下:
| id | value1 | value2 | value3| value4 | taken_at |
value
属性为数值,taken_at
属性为日期时间值,指的是测量时间。
使用此数据库的应用程序稍后需要在一个时间间隔内测量的平均值。例如,它需要:
因为我不想每次都重新计算平均值,所以我在考虑计算它一次,然后将其保存在averages
的表格中,其结构如下:
| id | value1 | value2 | value 3 | value4 | begin | end |
每个valuei
代表valuei
表中measurements
和begin
日期之间的end
的平均值。这样我就可以保存每个任意间隔之间的平均值。这个架构的问题是我不知道如何进行类型的查询"给我过去3个月的平均值"或者"给我所有年度间隔的平均值"。
如何使用此结构进行此类查询?有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
所以你应该能够自己加入这个桌子并至少在三个月内完成这项工作。任何比这更大的东西都可能变得更大
尝试
Select a.id, average(a.value1,b.value1,c.value1),
average(a.value2,b.value2,c.value2)etc... a.taken_at
from measurements a, measurements b, measurements c
where a.taken_at =b.taken_at+1
and b.taken_at=c.taken_at+1
Group By id,a.taken_at
这会给你三个月的平均结束时间。或者你可以做
Select id, average(value1), average(value2)...
from measurements
where taken at between(x,y)
Group by id
但这只是给你一行自定义间隔(x,y)平均值 如果这有帮助,请告诉我。