2017-06-22 50 views
1

我有measurements一個表,具有以下結構查詢行:保存和由日期間隔

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

value屬性是數字值,並且taken_at屬性是指日期時間值測量的時間。

使用此數據庫的應用程序將稍後需要在一個時間間隔內測量的平均值。例如,它將需要:

  • 過去一個月的測量結果的平均值。
  • 最近3周測量的平均值
  • 今年測量的平均值。

因爲我不想每一次,我想在計算它一次,然後用以下結構保存它的averages表重新計算的平均值:

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

其中每個valuei代表在beginend日期之間取得的來自measurements表的所有valuei的平均值。這樣我可以保存每個任意間隔的平均值。這個模式的問題在於我不知道如何讓查詢的類型爲「給我過去3個月的平均值」或「給我所有的年均間隔的平均值」。

如何使用此結構進行此類查詢?有沒有更好的方法來完成這一點?

回答

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)的平均值的一行 讓我知道這是否有助於與否。