Ниже для BigQuery Standard SQL
#standardSQL
SELECT email, first_item_purchased,
MAX(purchases_within_90_days) OVER(PARTITION BY email) AS purchases_within_90_days,
MAX(purchases_within_180_days) OVER(PARTITION BY email) AS purchases_within_180_days,
MAX(purchases_within_270_days) OVER(PARTITION BY email) AS purchases_within_270_days
FROM `project.dataset.table`
Если применить к образцу данных в вашем вопросе - результат будет
Row email first_item_purchased purchases_within_90_days purchases_within_180_days purchases_within_270_days
1 abc@gmail null 1 1 2
2 abc@gmail product_1 1 1 2
3 abc@gmail product_2 1 1 2
4 def@gmail null 0 2 3
5 def@gmail product_1 0 2 3
6 def@gmail product_2 0 2 3