我有一个表,其中包含磁盘配额的更新请求。每条记录都有请求时间、路径和配额大小。我需要聚合某个月份对某个路径的所有请求,加上前一个月的最后一个请求。就像
sum(quota) over (partition by)
我希望你能提供一些关于如何以最优雅的方式做到这一点的想法或想法。当然,它可能是(很可能是)一个多阶段的过程。
你的问题缺乏细节。要给出完整的答案,您需要提供表定义(ddl)、测试数据(最好是一个Fiddle)以及该数据的预期结果。但是,检索本月的数据和上个月的最新表单将变成如下内容:
select sq.path, sum(sq.quota) over (partition by sq.path) total_quota
from ( select s.path, s.quota
from some_table s
where s.path = 'certain path'
and date_trunc('month', s.request_time) = date_trunc('month', current_date)
union all
select sc.path, sc.quota
from some_table sc
where sc.path = 'certain path'
and (sc.path,sc.request_time) =
(select sl.path, max(sl.request_time)
from some_table sl
where sl.path = sc.path
and date_trunc('month', sl.request_time) = date_trunc('month', current_date - interval '1 month')
group by sl.path
) sq1
) sq;
如果感兴趣的月份不包含current_date
,您可以传递一个感兴趣月份的参数值。
注意:没有测试。