【问题标题】:How can I compute rolling average on BigQuery如何计算 BigQuery 的滚动平均值
【发布时间】:2019-08-14 12:58:56
【问题描述】:

我遇到了一个问题,我不确定如何在 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          |
+------+-------------+--------------------+----------------------+

其中“AVG 1st week before T”是用户在 T 前 7 天内每天消耗的香蕉的平均值。

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

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

提前谢谢你,

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    值得一读的东西Analytic Functions Concepts in Standard SQL

    这是我想出的一个 sn-p,在当前行给出了过去 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'
    

    【讨论】:

    • 您好,首先感谢您的回答,非常感谢。问题是我的数据是稀疏的,有些日期丢失了,想象一下两个日期之间有几天的间隔,如何考虑 sql 请求中的稀疏部分?经过一番搜索,我发现了这个:stackoverflow.com/questions/49883311/... 但是如果 2 个日期之间的间隔大于窗口的大小,则它不起作用,在这种特定情况下,它将放置最后一行的值而不是平均值。如果你知道如何在不使用笛卡尔积的情况下做到这一点,我会很高兴听到这个消息,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2019-09-02
    • 2018-05-08
    相关资源
    最近更新 更多