Google bigquery Bigquery-如何抽象重复逻辑

Google bigquery Bigquery-如何抽象重复逻辑,google-bigquery,Google Bigquery,我发现自己处于这样一种境地,我会像这样一遍又一遍地重复同样的逻辑 SELECT city, CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY), value, 0)) AS INT64) AS value_7, CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY), value, 0)) AS INT64) AS value_14 FRO

我发现自己处于这样一种境地,我会像这样一遍又一遍地重复同样的逻辑

SELECT
  city,
  CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY), value, 0)) AS INT64) AS value_7,
  CAST(SUM(IF(date > DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY), value, 0)) AS INT64) AS value_14
FROM
  table
GROUP BY
  city
现在,在
value
旁边,我有10个其他列,我想对它们应用相同的逻辑。有没有一种简单的方法来抽象格式和条件化

my\u func(val\u col,date\u col,days)

我知道我可以手动完成,但它看起来太难看了。

虽然“BigQuery不支持自己定义聚合函数”(希望如此),但总有解决办法-请参见下文(BigQuery标准SQL)


完美的正是我想要的。谢谢你的帮助。
#standardSQL
CREATE TEMP FUNCTION my_func(arr ARRAY<STRUCT<date_col DATE, val_col INT64>>, days INT64) AS ((
  SELECT CAST(SUM(IF(date_col > DATE_SUB(CURRENT_DATE(), INTERVAL days DAY), val_col, 0)) AS INT64)
  FROM UNNEST(arr)
)); 
SELECT
  city,
  my_func(ARRAY_AGG((date, value)), 7) value_7,
  my_func(ARRAY_AGG((date, value)), 14) value_14
FROM `project.dataset.table`
GROUP BY city  
  my_func(ARRAY_AGG((date, value2)), 7) value2_7,
  my_func(ARRAY_AGG((date, value2)), 14) value2_14