2016-09-15 124 views
1

比方說,我有一個表,一時間片這樣的:如何在PostgreSQL中獲得時間戳的浮動平均值?

CREATE TABLE foo (
    spent_on DATETIME, 
    hours FLOAT 
) 

假設spent_on是時間戳值記錄下來,並hours是代表花在工作小時數的浮點值。

如何獲得過去7天內小時的平均浮動時間?

我想出了下面的,但它不會工作:

select spent_on, hours, avg(hours) 
over RANGE BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from daily; 

我得到以下錯誤:

ERROR: syntax error at or near "ROW" 
LINE 1: ... BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from d... 

我試圖瞭解窗口函數的文檔,但是我很難在分區,窗口和框架之間抓住這個想法。結果,不能拿出一個查詢。

+1

不幸的Postgres目前不支持基於間隔的範圍。 –

回答

2

我不知道有關RANGE語法,所以讓我提供一個子查詢的解決方案(如果性能是無法與小桌子ETC的問題。):

SELECT t.spent_on,t.hours, 
     COALESCE((SELECT AVG(s.hours) FROM foo 
     WHERE t.spent_on > CURRENT_TIMESTAMP - INTERVAL '7 days'),0) float_avg 
FROM foo t 
+0

我試過了。這種工作,但我有空值的問題(一些行包含NULLS)。不知道我怎麼可以結合這個'coalesce'調用... – exhuma

+1

立即嘗試@exhuma – sagi

+0

哦上帝,我現在覺得這麼愚蠢......^_ ^謝謝! – exhuma