Hive 最近3个月的平均值,位于配置单元中当前月份值的旁边

Hive 最近3个月的平均值,位于配置单元中当前月份值的旁边,hive,hiveql,Hive,Hiveql,我有一张表,上面有每个项目的月销售额。我需要过去3个月的平均销售价值旁边的当月销售的每个项目 需要在配置单元中执行此操作 示例输入表如下所示 Item_ID Sales Month A 4295 Dec-2018 A 245 Nov-2018 A 1337 Oct-2018 A 3290 Sep-2018 A 2000 Aug-2018 B 856 Dec-2018 B 1694 Nov-2018 B 4286

我有一张表,上面有每个项目的月销售额。我需要过去3个月的平均销售价值旁边的当月销售的每个项目

需要在配置单元中执行此操作

示例输入表如下所示

Item_ID Sales   Month
A   4295    Dec-2018
A   245     Nov-2018
A   1337    Oct-2018
A   3290    Sep-2018
A   2000    Aug-2018
B   856     Dec-2018
B   1694    Nov-2018
B   4286    Oct-2018
B   2780    Sep-2018
B   3100    Aug-2018
结果表应该如下所示

Item_ID Sales_Current_Month     Month           Sales_Last_3_months_average
A           4295                Dec-2018        1624
A           245                 Nov-2018        2209
B           856                 Dec-2018        2920
B          1694                 Nov-2018        3388.67

假设没有丢失的月份数据,您可以使用avg窗口函数来执行此操作

select t.* 
      ,avg(sales) over(partition by item_id order by month rows between 3 preceding and 1 preceding) as avg_sales_prev_3_months
from tbl t

如果月份列的格式不同于yyyyMM,请使用适当的转换,以便按预期进行排序。

您是否也可以包括您的尝试?同时澄清是否应将当前月份包括在最近3个月的平均值中?最近3个月的平均值不包括当前月份。对不起,我还在制定一个逻辑。我还没有想出一个有效的尝试。即使你的尝试有错误也没关系。您应该始终将其包含在问题中。感谢Vamsi的查询。查询运行,但给出奇怪的结果。在应用上述查询之前,是否需要按照项目id的特定顺序和/或月份对表进行排序?我认为问题可能出现在前3行和前1行,其中一行应该是当前行。我找到了另一种方法,通过计算当前行和后面3行之间的行数之和,然后减去当前值,然后除以3,得到所需的平均值。但是,现在我面临着项目ID缺少月份的问题