以下のクエリは、結果first
を 4 つの等間隔の日付ビンにグループ化しthe_value
、各ビンの平均を集計します。
WITH first as(
SELECT
extract(EPOCH FROM foo.t_date) as the_date,
foo_val as the_value
FROM bar
INNER JOIN foo
ON
foo.user_id = bar.x_id
and
foo.user_name = 'xxxx'
)
SELECT bin, round(sum(bin_sum) OVER w /sum(bin_ct) OVER w, 2) AS running_avg
FROM (
SELECT width_bucket(first.the_date
, x.min_epoch, x.max_epoch, x.bins) AS bin
, sum(first.the_value) AS bin_sum
, count(*) AS bin_ct
FROM first
, (SELECT MIN(first.the_date) AS min_epoch
, MAX(first.the_date) AS max_epoch
, 4 AS bins
FROM first
) x
GROUP BY 1
) sub
WINDOW w AS (ORDER BY bin)
ORDER BY 1;
the_value
各ビンで最低の 20 の平均のみを計算できるようにしたいと思います。ここ Stackoverflow の他の投稿から、これが可能であり、おそらくORDER BY the_value
それrank()
が最善の方法であることがわかりました。しかし、私の苦労は、これを実装するために現在のクエリをどこで変更する必要があるかわからないということです。
任意の洞察をいただければ幸いです。
Postgres バージョン 9.3