我正在尝试使用LAG函数在BigQuery中计算28天移动总和。
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代码就能完成这个任务!
提示:如果您想使用日期范围,请使用UNIX_DATE()函数和ORDER BY。如果您想使用时间戳范围,请使用UNIX_SECONDS()、UNIX_MILLIS()或UNIX_MICROS()函数。
参考:https://cloud.google.com/bigquery/docs/reference/standard-sql/analytic-function-concepts#def_window_frame - Ivan P.