Как я могу рассчитать значения за последние 3 дня для каждой даты BigQuery SQL

# #sql #google-bigquery

Вопрос:

У меня есть таблица BQ, например

штрих-код заказы Дата
«001» 10 «2020-04-18»
«001» 9 «2020-04-17»
«001» 8 «2020-04-16»
«001» 7 «2020-04-15»
«001» 6 «2020-04-14»
«002» 20 «2020-04-18»
«002» 19 «2020-04-17»
«002» 18 «2020-04-16»
«002» 17 «2020-04-15»
«002» 16 «2020-04-14»

Я хочу рассчитать сумму заказов за последние 3 дня для каждой даты. Ресул, я ожидаю:

штрих-код заказы Дата
«001» 27 «2020-04-18»
«001» 24 «2020-04-17»
«001» 21 «2020-04-16»
«002» 57 «2020-04-18»
«002» 54 «2020-04-17»
«002» 51 «2020-04-16»

Таким образом, для «2020-04-18″ это будет (заказы»2020-04-18″) (заказы»2020-04-17″) (заказы»2020-04-16») для каждого штрих-кода. Как я могу сделать это в Google BigQuery? Может ли кто-нибудь предложить решение? Спасибо тебе!

Комментарии:

1. Ваше описание несовместимо с образцами данных. В описании отсутствуют заказы, сделанные до интересующего вас периода времени.

Ответ №1:

Также вы можете попробовать СТРОКИ:

 select
  t.*,
  sum(orders) over (partition by barcode order by date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as cumulative
from t
 

Ответ №2:

Похоже, вам нужны кумулятивные заказы с фильтрацией. Используйте подзапрос:

 select t.*
from (select t.*,
             sum(orders) over (partition by barcode order by date) as cumulative_orders
      from t
     ) t
where date > date_add(date, interval -3 day)
order by barcode, date desc;