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

Sql 如何返回最大滚动平均值的日期范围?,sql,google-bigquery,Sql,Google Bigquery,我有以下疑问: 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

我有以下疑问:

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))作为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
希望我足够清楚

谢谢


Simon.

我刚刚提出了这个
数组\u AGG(日期顺序按mov\u avg\u 7d DESC LIMIT 1)[OFFSET(0)]作为最高阈值\u end\u date
。这与您的解决方案有点不同。什么是STRUCT,什么是.*?谢谢使用STRUCT函数,您可以使用所需的任何字段构建结构,而不仅仅是日期。我认为它可能对您更有用,因为它是可扩展的。
*
将结构的字段扩展为结果中的列。我刚刚提出了这个
数组\u AGG(日期顺序按mov\u avg\u 7d DESC LIMIT 1)[OFFSET(0)]作为最高阈值\u end\u date
。这与您的解决方案有点不同。什么是STRUCT,什么是.*?谢谢使用STRUCT函数,您可以使用所需的任何字段构建结构,而不仅仅是日期。我认为它可能对您更有用,因为它是可扩展的。
*
将结构的字段扩展为结果中的列。
#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