Несколько дополнительных опций для BigQuery Standard SQL, поэтому вы видите разные подходы
Опция # 1
#standardSQL
SELECT team, SUM(num_val) sum_num FROM (
SELECT team, num_val, ROW_NUMBER() OVER(PARTITION BY team ORDER BY DATE DESC) pos
FROM `project.dataset.table`
)
WHERE pos <= 5
GROUP BY team
Опция # 2
#standardSQL
SELECT team, sum_num FROM (
SELECT team,
SUM(num_val) OVER(PARTITION BY team ORDER BY DATE DESC ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) AS sum_num,
ROW_NUMBER() OVER(PARTITION BY team ORDER BY DATE DESC) pos
FROM `project.dataset.table`
)
WHERE pos = 1
Если применить к образцу данных по вашему вопросу - оба результата приведут к следующему результату
Row team sum_num
1 ab 31
2 cd 27
Хотя вышеуказанные параметры могут быть полезны в некоторых более сложных случаях - в вашем конкретном случае - я быперейти с вариантом (похожим на один), представленным в ответе Филипе
#standardSQL
SELECT team, (SELECT SUM(num_val) FROM UNNEST(num_values)) sum_num
FROM (
SELECT team, ARRAY_AGG(STRUCT(num_val) ORDER BY DATE DESC LIMIT 5) num_values
FROM `project.dataset.table`
GROUP BY team
)