如何在BigQuery上计算滚动平均值

时间:2019-08-14 12:58:56

标签: google-bigquery

我遇到了一个问题,我不确定如何在Big Query上进行计算,我有一个表格,其中列出了用户食用的香蕉量以及与他进食时间相关的日期:

+------+-------+--------------+
| user | banana|    date      |
+------+-------+--------------+
| a    |     5 |  2019/01/18  |
| .    |     ..|              |
| a    |     2 |  2019/05/18  |
| b    |     2 |  2019/02/18  |
| b    |     3 |  2019/03/18  |
| b    |     1 |  2019/03/18  |
+------+-------+--------------+

我想得到这样的东西:

+------+-------------+--------------------+----------------------+
| user | date  T     |AVG1st week before T|AVG2nd   week before T|
+------+-------------+--------------------+----------------------+
| a    | 2019/01/18  |  2                 |           1          |
| .    |     ..      |  ..                |           .          |
| a    | 2019/01/20  |  3                 |           1          |
| b    |     2       |  2                 |          2.5         |
| b    |     3       |  2                 |           5          |
| b    |     1       |  1                 |           2          |
+------+-------------+--------------------+----------------------+

其中“ T之前第一周的AVG”是用户在T之前的7天每天消耗的香蕉的平均值。

我认为对于每一行,我都会计算“ T之前7天”变量,并创建“ T之前14天”变量。然后在子查询中计算金额,但我认为这不是处理此金额的最佳方法。

如果您有任何建议,我将很乐意与您讨论!

先谢谢您

1 个答案:

答案 0 :(得分:1)

值得一读的Analytic Functions Concepts in Standard SQL

这是我想出的摘录,在当前行中提供了最近7天“平均食用的香蕉”。

SELECT
  user,
  banana,
  date,
  AVG(banana) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg
FROM
  `banana.banana`
WHERE
  user = 'a'

enter image description here