Sql 获取vertica中n个最后值的聚合

Sql 获取vertica中n个最后值的聚合,sql,analytics,vertica,Sql,Analytics,Vertica,我们有一个包含日期、销售额和商品列的表 一件商品的价格在每次销售中都可能不同,我们想找出一件商品的价格,它在最近50次销售中的平均值 有没有办法在Vertica中使用分析函数来实现这一点 对于一款受欢迎的商品,所有这50笔销售都可能从本周开始。另一方面,我们可能需要有一个3个月的窗口 我们可以知道每项的窗口是什么吗?您可以使用window frame子句获取每行的值: select t.*, avg(t.price) over (partition by item

我们有一个包含日期、销售额和商品列的表

一件商品的价格在每次销售中都可能不同,我们想找出一件商品的价格,它在最近50次销售中的平均值

有没有办法在Vertica中使用分析函数来实现这一点

对于一款受欢迎的商品,所有这50笔销售都可能从本周开始。另一方面,我们可能需要有一个3个月的窗口


我们可以知道每项的窗口是什么吗?

您可以使用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;
在重读这个问题时,我怀疑您希望每个项目都有一行。为此,请使用行号:


显示一些示例数据和预期结果以及您的尝试。是的,选择相关行集将属于其中n=50,因此您可以使用。因为可能有一种更简单的方法来编写查询,尽管我无法确认语法是否有效,因为没有在文档中列出它。
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;