我们的表格包含dates
,sales
和item
列。
每件商品的商品价格可能会有所不同,我们希望找到商品的价格,并计算其最近 50销售额的平均价格。
有没有办法在Vertica中使用分析函数来做到这一点?
对于一个受欢迎的项目,所有这50个销售可能来自本周。另一方面,我们可能需要3个月的窗口。
我们可以根据item
知道这些窗口是什么吗?
答案 0 :(得分:1)
您可以使用window-frame子句获取每一行的值:
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;