相关疑难解决方法(0)

用于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
)
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,而不必写出28行SQL!

sql sliding-window google-bigquery

7
推荐指数
2
解决办法
7053
查看次数

在滚动时间内计算唯一ID

我有一个简单的表格,下面有很多ID和日期。

ID      Date
10R46   2014-11-23  
10R46   2016-04-11  
100R9   2016-12-21
10R91   2013-05-03 
...     ...
Run Code Online (Sandbox Code Playgroud)

我想制定一个查询,该查询针对日期(例如十天)的滚动时间范围计算唯一ID。这意味着对于每个日期,它应该给我该日期与10天后之间的唯一ID数。结果应如下所示。

UniqueTenDays    Date
200              2014-11-23 
324              2014-11-24 
522              2014-11-25
532              2014-11-26 
...              ...
Run Code Online (Sandbox Code Playgroud)

如下所示,但是我意识到我需要应用WHERE子句并以某种方式计算每个Date的ID。

SELECT Date, COUNT(DISTINCT ID)
FROM T 
WHERE Date BETWEEN DATE_SUB(Date, INTERVAL 10 DAY) AND Date
GROUP BY Date
ORDER BY Date
Run Code Online (Sandbox Code Playgroud)

提前致谢。

ansi-sql google-bigquery

5
推荐指数
1
解决办法
810
查看次数

标签 统计

google-bigquery ×2

ansi-sql ×1

sliding-window ×1

sql ×1