有什么方法可以在 Presto SQL 中对日期进行 while 循环以获得 12 个月的滚动销售额?

Is there any way of doing while loop for dates to get 12 month rolling sales amount in Presto SQL?

我想在 Presto 中实现以下逻辑 SQL:

声明@StartDate DATE = '2016-10-01' ; 声明@EndDate DATE = '2021-05-02' ;

WHILE (@StartDate <= @EndDate) 开始
打印@StartDate;

声明@12MonthStartDate 日期
select @12MonthStartDate = (SELECT DateAdd(YEAR, -1, @StartDate));

声明@12MonthEndDate 日期
select @12MonthEndDate = @StartDate ;

select * 来自我的表格 其中日期 >= @12MonthStartDate 和日期 <= @12MonthStartDate

根据以上结果,我们需要滚动 12 个月并将最大日期值插入 table。

注意:我们在 Amperity 工具中使用 Presto SQL。

设置@StartDate = DATEADD(天, 1, @StartDate);

结束;

任何人都可以帮助如何在 Presto 中实现上述逻辑 SQL?

谢谢

您可以使用 window 函数计算滚动总和:

SELECT dt, 
   sum(amount) OVER (
       ORDER BY dt 
       RANGE BETWEEN INTERVAL '12' MONTH PRECEDING AND CURRENT ROW)
FROM my_table

对于 my_table 中的每一行,它会查看按 dt(升序)排序的所有行。然后它将 windows 限制为 dt 在当前行的 dt 和该行的 dt 之前 12 个月之间的行。最后,它为 window.

中的所有行计算 amount 的总和

有关 RANGE window 帧如何工作的说明,请参阅 this blog post