在Vertica上获取n个最后的值的聚合
问题描述:
我们有表格,其列dates
,sales
和item
。在Vertica上获取n个最后的值的聚合
一个项目的价格可以在每个销售不同,我们想要找到一个项目的价格,平均在最近 50销售。
有没有办法在Vertica中使用分析函数来完成此操作?
对于一个受欢迎的项目,所有这50个销售可能是从这个星期。另一方面,我们可能需要3个月的时间。
根据item
,我们可以知道这些窗口是什么吗?
答
你会使用一个窗框子句,以获得在每一行的值:
select t.*,
avg(t.price) over (partition by item
order by t.date desc
rows between 49 preceding and current row
) as avg_price_50
from t;
在重新阅读的问题,我怀疑你想每件单排。为此,请使用row_number()
:
select t.item, avg(t.price)
from (select t.*,
row_number() over (partition by item order by t.date desc) as seqnum
from t
) t
where seqnum <= 50
group by item;
显示一些示例数据和预期结果以及您的尝试。 –
是的,选择相关的行集合将落入[标签:最大n-per-group](其中'n = 50'),因此您可以使用[标准答案](https://stackoverflow.com/问题/ 3800551 /选择先行功能于各组按组)。鉴于[这个答案](https://stackoverflow.com/a/44209336/812837)可能有一个更简单的方法来编写查询,但我不能确认该语法是有效的(找不到它在文档中列出。 –