2017-10-13 85 views
0

我们有表格,其列dates,salesitem在Vertica上获取n个最后的值的聚合

一个项目的价格可以在每个销售不同,我们想要找到一个项目的价格,平均在最近 50销售。

有没有办法在Vertica中使用分析函数来完成此操作?

对于一个受欢迎的项目,所有这50个销售可能是从这个星期。另一方面,我们可能需要3个月的时间。

根据item,我们可以知道这些窗口是什么吗?

+1

显示一些示例数据和预期结果以及您的尝试。 –

+1

是的,选择相关的行集合将落入[标签:最大n-per-group](其中'n = 50'),因此您可以使用[标准答案](https://stackoverflow.com/问题/ 3800551 /选择先行功能于各组按组)。鉴于[这个答案](https://stackoverflow.com/a/44209336/812837)可能有一个更简单的方法来编写查询,但我不能确认该语法是有效的(找不到它在文档中列出。 –

回答

1

你会使用一个窗框子句,以获得在每一行的值:

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;