代码之家  ›  专栏  ›  技术社区  ›  Simon Breton

如何返回最大滚动平均值的日期范围?

  •  0
  • Simon Breton  · 技术社区  · 6 年前

    我有以下疑问:

    SELECT account,
    FLOOR(max(mov_avg_7d)) AS max_mov_avg_7d
    FROM (
      SELECT account,date,items,
      AVG(items) OVER (PARTITION BY account ORDER BY date RANGE BETWEEN 6 PRECEDING AND CURRENT ROW) AS mov_avg_7d,
      FROM [my_table] 
    )
    group by account
    

    这是我桌子的一个样品:

    Account         Date        Items
    accountxxxxxx   2009-01-01  235
    accountxxxxxx   2009-01-02  261
    accountxxxxxx   2009-01-03  186
    accountxxxxxx   2009-01-04  173
    accountxxxxxx   2009-01-05  273
    accountxxxxxx   2009-01-06  254
    accountxxxxxx   2009-01-07  386
    

    FLOOR(max(mov_avg_7d)) AS max_mov_avg_7d 我可以检索一个帐户在7天滚动期内的最高平均项目数。

    我希望能够为每个帐户有日期范围(7天)相关的最高平均项目数超过7天。

    输出如下:

    Account        Date       Items   max_mov_avg_7d   min_date_range max_date_range     
    accountxxxxxx  2009-01-01 235     635              2009-05-12     2009-05-19
    

    希望我说得够清楚了。

    谢谢!

    西蒙。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Elliott Brossard    6 年前
    #standardSQL
    SELECT
      account,
      ARRAY_AGG(STRUCT(date, items, mov_avg_7d) ORDER BY mov_avg_7d DESC LIMIT 1)[OFFSET(0)].*
    FROM (
      SELECT account,date,items,
      FLOOR(AVG(items) OVER (PARTITION BY account ORDER BY date RANGE BETWEEN 6 PRECEDING AND CURRENT ROW)) AS mov_avg_7d
      FROM `my_table`
    )
    group by account