簡體   English   中英

均勻間隔的多個平均值

[英]Multiple averages over evenly spaced intervals

我正在努力學習SQL,所以請耐心等待。 我正在使用PostgreSQL 9.3

我想根據日期窗口平均一列。 我已經能夠編寫窗口函數來實現這個設置interval但我希望能夠在不斷增長的interval完成此操作。 我的意思是:

average values from date_0 to date_1
average values from date_0 to date_2
average values from date_0 to date_3
..... so date date_0 stays the same and date_x grows and creates a larger sample

我假設有一種比我想要平均的每個范圍運行查詢更好的方法。 任何建議表示贊賞。 謝謝。

編輯

我正在嘗試創建均勻間隔的二進制位,用於聚合表的值。
我來到這個區間:

(MAX(date) - MIN(date)) / bins

其中date是表的列
bins是我想把桌子分成兩部分的箱子。

date_0 = MIN(日期)
date_n = MIN(日期)+(間隔* n)

我建議使用方便的函數width_bucket()

要獲得每個時間段的平均值(“bin”):

SELECT width_bucket(extract(epoch FROM t.the_date)
                  , x.min_epoch, x.max_epoch, x.bins) AS bin
     , avg(value) AS bin_avg
FROM   tbl t
    , (SELECT extract(epoch FROM min(the_date)) AS min_epoch
            , extract(epoch FROM max(the_date)) AS max_epoch
            , 10 AS bins
       FROM   tbl t
      ) x
GROUP  BY 1;

要獲得(逐步)增長時間間隔的“運行平均值”:

SELECT bin, round(sum(bin_sum) OVER w /sum(bin_ct) OVER w, 2) AS running_avg
FROM  (
   SELECT width_bucket(extract(epoch FROM t.the_date)
                     , x.min_epoch, x.max_epoch, x.bins) AS bin
        , sum(value) AS bin_sum
        , count(*)   AS bin_ct
   FROM   tbl t
       , (SELECT extract(epoch FROM min(the_date)) AS min_epoch
               , extract(epoch FROM max(the_date)) AS max_epoch
               , 10 AS bins
          FROM   tbl t
         ) x
   GROUP  BY 1
   ) sub
WINDOW w AS (ORDER BY bin)
ORDER  BY 1;

使用the_date而不是date作為列名,避免使用保留字作為標識符。
由於width_bucket()目前僅針對double precisionnumeric ,因此我從the_date提取了epoch值。 詳細信息:
在PostgreSQL中聚合(x,y)坐標點雲

如果您有一組數據,則可以在單獨的列中輕松獲得所需的數據:

select avg(case when date between date_0 and date_1 then value end) as avg1,
       avg(case when date between date_0 and date_2 then value end) as avg2,
       . . .
       avg(case when date between date_0 and date_n then value end) as avgn            
from table t
where date >= date_0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM