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

前端 未结 3 640
不思量自难忘°
不思量自难忘° 2020-12-01 05:33

I\'m trying to compute a 28 day moving sum in BigQuery using the LAG function.

The top answer to this question

Bigquery SQL for sliding window aggregate

3条回答
  •  清歌不尽
    2020-12-01 06:40

    Bigquery: How to get a rolling time range in a window clause.....

    This is an old post, but I spend a long time searching for a solution, and this post came up so maybe this will help someone.

    IF your partition of your window clause does not have a record for every day, you need to use the RANGE clause to accurately get a rolling time range, (ROWS would search the number records, which would to go too far back since you don't have a record for every day in your PARTITION BY). The problem is that in Bigquery RANGE clause does not support Dates.

    From BigQuery's documentation:

    numeric_expression must have numeric type. DATE and TIMESTAMP are not currently supported. In addition, the numeric_expression must be a constant, non-negative integer or a parameter.

    The workaround I found was to use the UNIX_DATE(date_expression) in the ORDER BY clause along with a RANGE clause:

    SUM(value) OVER (PARTITION BY Column1 ORDER BY UNIX_DATE(Date) RANGE BETWEEN 5 PRECEDING AND CURRENT ROW

提交回复
热议问题