Как вернуть диапазон дат максимального скользящего среднего значения? - PullRequest
0 голосов
/ 05 июля 2018

У меня следующий запрос:

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 Ответ

0 голосов
/ 05 июля 2018
#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...