# #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;