下面的查询将结果分组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 版