Google bigquery 将多个标量bigquery查询组合到单个查询中以生成一个表

Google bigquery 将多个标量bigquery查询组合到单个查询中以生成一个表,google-bigquery,Google Bigquery,我有一个BiqQuery查询,基本上以日期为参数,计算我们的应用程序在该日期附近的活跃用户数 现在,如果我想绘制一张一年活跃用户的图表,我必须每月运行12次查询,并手动整理结果,这很容易出错,也很耗时 有没有一种方法可以生成一个bigquery查询,该查询运行子查询12次,并将结果放在12个不同的行上 例如,如果我的查询是 SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-01-01' 假设您有一个名为date的列和

我有一个BiqQuery查询,基本上以日期为参数,计算我们的应用程序在该日期附近的活跃用户数

现在,如果我想绘制一张一年活跃用户的图表,我必须每月运行12次查询,并手动整理结果,这很容易出错,也很耗时

有没有一种方法可以生成一个bigquery查询,该查询运行子查询12次,并将结果放在12个不同的行上

例如,如果我的查询是

SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-01-01'

假设您有一个名为date的列和一个名为user_id的列,并且希望每月计算不同的用户,您可以运行以下查询:

#standardSQL
SELECT
  DATE_TRUNC(date, MONTH) AS month,
  COUNT(DISTINCT user_id) AS distinct_users
FROM YourTable
GROUP BY month
ORDER BY month ASC;
在这里,您可以用要运行的子查询替换表。作为一个独立的示例:

#standardSQL
WITH YourTable AS (
  SELECT DATE '2017-06-25' AS date, 10 AS user_id UNION ALL
  SELECT DATE '2017-05-04', 11 UNION ALL
  SELECT DATE '2017-06-20', 10 UNION ALL
  SELECT DATE '2017-04-01', 11 UNION ALL
  SELECT DATE '2017-06-02', 12 UNION ALL
  SELECT DATE '2017-04-13', 10
)
SELECT
  DATE_TRUNC(date, MONTH) AS month,
  COUNT(DISTINCT user_id) AS distinct_users
FROM YourTable
GROUP BY month
ORDER BY month ASC;
埃利奥特教会了我所有的工会,它似乎做到了:

SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-01-01'
UNION ALL
SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-02-01'
UNION ALL
SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-03-01'

也许有更好的方法来参数化WHERE子句中的日期,但这对我来说很有用。

你能给我们看看你的查询吗?是的,我应该这样做,对不起!谢谢你的回复!这教会了我所有的联合,这是我最终解决方案的关键,但按月分组并不是我所需要的-我真的需要运行多个单独的查询并将它们连接起来。这是我最喜欢的SQL运算符。注意@charlesreid1我找到了一种比使用交叉连接更好的解决方案!基本上,从unnestgenerate_date_array'2017-01-01'、'2017-12-01'中选择d,间隔1个月作为d交叉连接$myQuery,其中activityTimeSELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-01-01' UNION ALL SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-02-01' UNION ALL SELECT COUNT(*) FROM MyTable WHERE activityTime < date '2017-03-01'