适用于28天滑动窗口聚合的BigQuery SQL(无需编写28行SQL)

阿兰

我正在尝试使用LAG函数在BigQuery中计算28天的移动总和。

这个问题的最佳答案

Bigquery SQL用于滑动窗口聚合

Felipe Hoffa的表示可以使用LAG功能。例如:

SELECT
    spend + spend_lagged_1day + spend_lagged_2day + spend_lagged_3day + ... +  spend_lagged_27day as spend_28_day_sum,
    user,
    date
FROM (
  SELECT spend,
         LAG(spend, 1) OVER (PARTITION BY user ORDER BY date) spend_lagged_1day,
         LAG(spend, 2) OVER (PARTITION BY user ORDER BY date) spend_lagged_2day,
         LAG(spend, 3) OVER (PARTITION BY user ORDER BY date) spend_lagged_3day,
         ...
         LAG(spend, 28) OVER (PARTITION BY user ORDER BY date) spend_lagged_day,
         user,
         date
  FROM user_spend
)

有没有一种方法无需写28行SQL!

链轮

BigQuery文档不能很好地解释该工具支持的窗口函数的复杂性,因为它没有指定在ROWS或RANGE之后会出现哪些表达式。它实际上支持窗口功能的SQL 2003标准,您可以在Web上的其他位置找到文档,例如here

这意味着您可以通过单个窗口功能获得所需的效果。范围是27,因为它是总和中当前行之前要包含的行数。

SELECT spend,
       SUM(spend) OVER (PARTITION BY user ORDER BY date ROWS BETWEEN 27 PRECEDING AND CURRENT ROW),
       user,
       date
FROM user_spend;

RANGE范围也非常有用。如果您的表缺少某些用户的日期,那么27个PRECEDING行将返回27天以上,但是RANGE会根据日期值本身生成一个窗口。在以下查询中,日期字段为BigQuery TIMESTAMP,范围以微秒为单位。我建议您每次在BigQuery中对这样的数学进行约会时,都应进行彻底测试,以确保它能给您期望的答案。

SELECT spend,
       SUM(spend) OVER (PARTITION BY user ORDER BY date RANGE BETWEEN 27 * 24 * 60 * 60 * 1000000 PRECEDING AND CURRENT ROW),
       user,
       date
FROM user_spend;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bigquery SQL用于滑动窗口聚合

来自分类Dev

Android WebView仅适用于API 28

来自分类Dev

Firebase 推送通知不适用于 API 28

来自分类Dev

BigQuery SQL for 28-day sliding window aggregate (without writing 28 lines of SQL)

来自分类Dev

自上周二以来,SQL平均滚动28天

来自分类Dev

Firefox不适用于格式为“ Wed. October 28,2015”的新Date()

来自分类Dev

Google BigQuery Standard SQL - 销售滑动窗口

来自分类Dev

SQL滑动窗口聚合(不使用窗口功能)

来自分类Dev

来自聚合函数的多列,但仅适用于匹配 WHERE 子句的行

来自分类Dev

编写不带聚合功能的SQL

来自分类Dev

RANDBETWEEN适用于SQL Server 2012

来自分类Dev

SQL选择不适用于哈希

来自分类Dev

sql查询不适用于order by

来自分类Dev

sql删除不适用于à

来自分类Dev

替换不适用于SQL表列

来自分类Dev

注册不适用于SQL

来自分类Dev

案例不适用于SQL

来自分类Dev

SQL 查询不适用于 RDS

来自分类Dev

SQL 不适用于 ResultSet

来自分类Dev

SQL脚本适用于SQL Fiddle,但不适用于MS SQL Server 2014

来自分类Dev

如何从SQL Server中的现有日期起4周/ 28天之内获取值

来自分类Dev

SQL查询适用于SQL Server,但不适用于MySQL

来自分类Dev

SQL级联不适用于SQL中的case语句

来自分类Dev

SQL语句不适用于MS SQL 2005

来自分类Dev

使用LIKE运算符:适用于SQL Server,但不适用于SQLite

来自分类Dev

SQL UDF适用于字符串,不适用于列

来自分类Dev

SQL查询中的问题。适用于MAX,但不适用于MIN

来自分类Dev

查询适用于sql studio,但不适用于C#

来自分类Dev

查询适用于mysql,但不适用于php sql调用