BigQuery 的 WHERE 子句中的 SELECT 语句不起作用

Posted

技术标签:

【中文标题】BigQuery 的 WHERE 子句中的 SELECT 语句不起作用【英文标题】:SELECT statement in WHERE clause on BigQuery not working 【发布时间】:2013-11-15 20:40:36 【问题描述】:

我正在尝试在 Google BigQuery 上运行以下查询:

SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp = (SELECT MAX(timeStamp) FROM [table1])

我收到以下错误:

错误:在第 3 行第 19 列遇到“”。期待以下之一:

BigQuery 不支持此功能吗?如果是这样,会有一个优雅的选择吗?

【问题讨论】:

这对我来说似乎是一个错误。试试SELECT SUM(var1) AS Revenue FROM [table1] t WHERE NOT EXISTS (SELECT * FROM [table1] tt WHERE tt.timeStamp > t.timeStamp) 它返回以下内容:错误:错误:2.97 - 2.221。一次只能执行一个查询。 【参考方案1】:

不支持比较谓词中的子选择,但您可以使用 IN。

SELECT SUM(var1) AS Revenue
FROM [table1]
WHERE timeStamp IN (SELECT MAX(timeStamp) FROM [table1])

【讨论】:

很高兴知道并感谢您提供替代解决方案。【参考方案2】:

我会使用 Rank() 来获取最大时间戳,并在 where 子句中过滤 #1。

select SUM(var1) AS Revenue
From
(SELECT var1 
,RANK() OVER (ORDER BY timestamp DESC) as RNK
FROM [table1]
)
where RNK=1

我不知道它如何与 BQ 一起工作,但在其他数据库技术中它会更有效,因为它只涉及单表扫描而不是 2。

【讨论】:

以上是关于BigQuery 的 WHERE 子句中的 SELECT 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择

BigQuery 将 rank / percent_rank 应用于带有 WHERE 子句的列

是否可以在 Union All BigQuery SQL 中让 where 子句引用另一个 where 子句?

在 BigQuery 中,带有空值数组列的“where”子句导致问题

在 where 子句中的 Oracle 集合

python bigquery 库 DB-API 接口如何支持 WHERE IN 或 WHERE ANY 子句