按日期间隔保存和查询行

时间:2017-06-22 16:58:16

标签: mysql sql database

我有一个measurements表,其结构如下:

| id | value1 | value2 | value3| value4 | taken_at |

value属性为数值,taken_at属性为日期时间值,指的是测量时间。

使用此数据库的应用程序稍后需要在一个时间间隔内测量的平均值。例如,它需要:

  • 过去一个月的平均测量值。
  • 过去3周的平均测量值
  • 今年的平均测量值。

因为我不想每次都重新计算平均值,所以我在考虑计算它一次,然后将其保存在averages的表格中,其结构如下:

| id | value1 | value2 | value 3 | value4 | begin | end |

每个valuei代表valuei表中measurementsbegin日期之间的end的平均值。这样我就可以保存每个任意间隔之间的平均值。这个架构的问题是我不知道如何进行类型的查询"给我过去3个月的平均值"或者"给我所有年度间隔的平均值"。

如何使用此结构进行此类查询?有没有更好的方法来实现这一目标?

1 个答案:

答案 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)平均值 如果这有帮助,请告诉我。