SQL滑动窗口聚合(不使用窗口函数)

Posted

技术标签:

【中文标题】SQL滑动窗口聚合(不使用窗口函数)【英文标题】:SQL sliding window aggregation (without using window function) 【发布时间】:2016-07-23 18:30:36 【问题描述】:

我正在寻找一个可以通过以下方式聚合 21 天前的数据的查询: 我的表有以下列: 帐号、日期、度量

对于每个帐户,我需要过去 21 天的总和(衡量)日期。 知道如何在没有窗口/分析功能的纯 SQL 中做到这一点吗? (我在不支持分析功能的 BI 产品中编写 SQL)

【问题讨论】:

你能提供样本数据和想要的结果吗? 21 天后是什么? 【参考方案1】:

一种相当低效的方法使用相关子查询。如果您想要前 21 天的每个条目,那么:

select t.*,
       (select sum(t2.measure)
        from t t2
        where t2.accountid = t.accountid and
              t2.date > t.date - interval '21' day
       ) as sum21
from t;

并不是说日期函数因数据库而异,因此您的特定数据库可能有另一种减去 21 天的方法。

【讨论】:

以上是关于SQL滑动窗口聚合(不使用窗口函数)的主要内容,如果未能解决你的问题,请参考以下文章

在 KDB/Q 中按时滑动窗口

Spark SQL 滑动窗口差分计算

Flink SQL 分组窗口函数 Group Window 实战

R语言进行数据聚合统计(Aggregating transforms)计算滑动窗口统计值(Window Statistics):使用R原生方法data.tabledplyr等方案计算滑动分组统计

Spark-Streaming之window滑动窗口应用

Flink SQL--- Over Aggregation