prestosql每天得到最近7天的平均值



我的问题与这里的问题非常相似,但我使用的是Presto SQL(在aws-athena上(,在Presto中找不到有关循环的信息。

为了重申这个问题,我想查询一下:

给定的表包含:DayNumber of Items for this Day

我想要:DayAverage Items for Last 7 Days before "Day"因此,如果我有一个表,它包含12月25日至1月25日的数据,那么我的输出表应该包含1月1日至1日25日的信息。从1月1日至25日的每一天,这将是过去7天的平均物品数量。

有可能用presto做这件事吗?

也许你可以试试这个

  1. calendar公共表表达式(CTE(用于生成两个日期范围之间的日期
with calendar as (                              
select date_generated                               
from (                              
values (sequence(date'2021-12-25', date'2022-01-25', interval '1' day))                             
) as t1(date_array)                             
cross join unnest(date_array) as t2(date_generated)),                               
  1. tempCTE基本上用于生成date group,其中包含每个日期组的最后7天
temp as (select c1.date_generated as date_groups    
, format_datetime(c2.date_generated, 'yyyy-MM-dd') as dates
from calendar c1, calendar c2                               
where c2.date_generated between c1.date_generated - interval '6' day and c1.date_generated                              
and c1.date_generated >= date'2021-12-25' + interval '6' day)

该部分的输出:

日期分组2022-01-012021-12-262022-01-012022-01-012022-01-012022-01-012022-01-012022-01-01

您想要一个运行平均值(AVG OVER(

select
day, amount,
avg(amount) over (order by day rows between 6 preceding and current row) as avg_amount
from mytable
order by day
offset 6;

我尝试了许多不同的变体来获得;运行平均值";(多亏了Thorsten的回答,我现在知道这就是我想要的(,但无法通过表中的其他列(不包括在我最初的问题中(获得我想要的输出,但这最终奏效了:

SELECT day, <other columns>, avg(amount) OVER (
PARTITION BY <other columns>
ORDER BY date(day) ASC
ROWS 6 PRECEDING) as avg_7_days_amount FROM table ORDER BY date(day) ASC

相关内容

  • 没有找到相关文章

最新更新